2024-02-17-物联网C语言(4-预处理)
1.2024-02-16-物联网C语言(1-数据类型与语句)2.2024-02-17-物联网C语言(2-数组)3.2024-02-17-物联网C语言(3-函数)
4.2024-02-17-物联网C语言(4-预处理)
5.2024-02-17-物联网C语言(5-指针)6.2024-02-18-物联网C语言(6-动态内存申请)7.2024-02-18-物联网C语言(7-字符串处理函数)8.2024-02-18-物联网C语言(8-结构体、共用体、枚举)9.2024-02-19-物联网C语言(9-链表)10.2024-02-20-物联网C语言(10-文件)11.2024-02-21-物联网系统编程(1-Shell语言)12.2024-02-21-物联网系统编程(2-系统调用)13.2024-02-22-物联网系统编程(3-进程)14.2024-02-23-物联网系统编程(4-信号)15.2024-02-24-物联网系统编程(5-管道、命名管道)16.2024-02-27-物联网系统编程(6-消息队列)17.2024-02-27-物联网系统编程(7- 共享内存)18.2024-02-27-物联网系统编程(8-线程)19.2024-02-28-物联网系统编程(9-多任务互斥与同步)20.2024-02-29-Linux高级网络编程(1-计算机网络概述)21.2024-02-29-Linux高级网络编程(2-UDP编程)22.2024-02-29-Linux高级网络编程(3-UDP编程-TFTP、广播、多播)23.2024-02-29-Linux高级网络编程(4-TCP编程)24.2024-03-01-Lniux高级网络编程(5-网络通信过程)25.2024-03-01-Linux高级网络编程(6-原始套接字)4.预处理
4.1 c语言的编译过程
gcc -E hello.c -o hello.i # 1.预编译 gcc -S hello.i -o hello.s # 2. 编译 gcc -c hello.s -o hello.o # 3. 汇编 gcc hello.o -o hello_elf # 4. 链接
-
预编译
将
.c
中的头文件展开、宏展开 -
编译
将预处理之后的
.i
文件生成.s
汇编文件 -
汇编
将
.s
汇编文件生成.o
目标文件 -
链接
将
.o
文件链接成目标文件
4.2 include
#include <> // 用尖括号包含头文件,在系统指定的目录下找头文件 #include "" // 用双引号包含头文件,在当前目录下找头文件;如果找不到,再到系统目录下找,一般自定义函数使用
注意:
- include也可以用来包含
.c
文件,但是不建议。因为这样会导致.c
文件在预编译阶段被展开,如果一个.c
被多次展开,会导致重复定义,所以不建议包含.c
文件。 - 预处理只是对include等预处理操作进行处理,不会进行语法检查,所以这一阶段即便代码有语法错误也不会报错。
4.3 define
定义宏用define,宏是在预编译的时候进行替换
-
不带参宏
#define PI 3.1415926 注意:宏定义后边不用加分号
-
带参宏
#define S(a,b) (a)*(b) #include <stdio.h> #define PI 3.1415926 #define S(a,b) a*b int main(){ printf("PI = %lf\n",PI); printf("a * b = %d",S(2,4)); } 输出结果
PI = 3.141593 a * b = 8 带参宏与带参函数
-
带参宏被调用多少次就会展开多少次,执行代码的时候没有函数调用的过程,不需要压栈弹栈,这是一种空间换时间的做法。
带参函数,调用的时候需要压栈弹栈,浪费了时间,节省了空间。
-
带参函数的形参是有类型的,带参宏的形参是没有类型名的。
-
功能简单,不需要太多空间,可选用带参宏;大多数情况下还是选择带参函数
-
4.4 选择性编译
-
第一种形式
// 如果当前的.c 中定义过AAA,就会编译代码段1,否则编译 代码段2 #ifdef AAA 代码段1 #else 代码段2 #endif -
第二种形式
// 该形式与第一种形式形成互补,这种方法可以防止头文件重复包含 #ifndef AAA 代码段1 #else 代码段2 #endif -
第三种形式
// 如果表达式为真,执行代码段1,否则执行代码段2 #if 表达式 代码段1 #else 代码段2 #endif 选择性编译都是预编译阶段干的事情。
本文来自博客园,作者:Yasuo_Hasaki,转载请注明原文链接:https://www.cnblogs.com/hasaki-yasuo/p/18018044
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步