第七节 声明与定义
1. C++编译过程
2. 声明与定义
通过编译的过程,可以看到,无论是变量还是函数,都有一个专门对应的符号表,而符号表中的内容只是保存了内存地址。
在C++中,向符号表中添加一行的行为,称为声明,在内容给出具体内容的行为,称为定义。
无论在定义任何内容前,都需要先进行声明。在程序设计时,可以仅给出声明部分,而实际运行时则必须给出定义部分。
#include <iostream> #include <string> using namespace std; // 变量的声明与定义 extern int a; int a; int b = 5; // 变量的声明定义,同时赋值 // 函数的声明与定义 int Add(int, int); int Add(int a, int b) { } // 只有当函数或者变量,与当前调用者不在同一个cpp文件时,才需要手动写出声明 struct Book; void PrintBookInfo(); int main() { // 在编写代码时,可以先不给出函数的具体定义 // 但是在编译时,必须给出函数定义 PrintBookInfo(); return 0; }
// Calculator.h int Add(); int Multi(); // main.cpp // "" 表示从当前项目文件夹查找头文件 // <> 表示从系统文件夹查找头文件 #include "Calculator.h" int main() { Add(); return 0; }
3.预编译指令
#pragma once #include <iostream> #define ADD(a, b) a + b #define SYS_WIN using namespace std; int main() { cout << 2 * ADD(3,5) << endl; #ifdef SYS_WIN cout << "Windows" << endl; #elif SYS_MAC cout << "MAC" << endl; #else cout << "OTHERS" << endl; #endif return 0; }
4. 练习
// 利用宏定义,定义常用的数学常量 // π,e,g // 利用宏定义,定义速率计算式 v=s/t #define PI 3.14 #define E 2.7 #define G 9.8 #define V(s, t) s / t //s,t是什么数据类型?
// 创建StringHelper.h 文件 // 给出下列函数的声明 // 1. 计算字符串长度的函数 // 2. 拼接两个字符串的函数 // 3. 将字符串所有字母大写(或小写)的函数,注意:这是一个函数 // 4. 打印字符串的函数 // 创建StringHelper.cpp文件,实现打印字符串函数的定义 // 在main.cpp中,使用自定义的打印字符串函数,输出“Hello,World” // StringHelper.h #pragma once #include <string> using namespace std; int Length(string ); string Append(string, string); string UpperOrDown(string, isUpper); void Print(string); // StringHelper.cpp #pragma once #include <string> #include <iostream> #include "StringHelper.h" using namespace std; void Print(string s) { cout << s << endl; } //main.cpp #include <string> #include <iostream> #include "StringHelper.h" #include "StringHelper.cpp" int main() { Print("Hello, World"); return 0; }
5. 作业
创建处理汽车信息的头文件和源文件,并给出:
1. 汽车结构体的声明与定义
2. 创建一个汽车结构体实例的CreateCar函数的声明与定义
3. 打印一个汽车结构体实例的PrintCarInfo函数的声明与定义
在main函数中,完成:
1. 创建一个汽车结构体实例
2. 打印一个汽车结构体实例
了解下列C++标准库文件的作用
iostream, fstream
string, numeric, compex
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-10-22 第三节 函数