关于预处理、宏和函数、编译链接的理解
来源:互联网 发布:商业数据分析 编辑:程序博客网 时间:2024/05/21 15:45
1.预处理标识符
__FILE__ //当前编译的源文件
__LINE__ //文件当前所属行号
__DATE__ //文件被编译日期
__TIME__ //文件被编译时间
# //将其后的宏参数进行字符串化操作,简单讲就是在它引用的宏变量左右各加上一个双引号
## //将其两边符合连接成一个符号
eg:#define CAT(STR1,STR2)\
STR1##STR2
printf("%d\n",CAT(aa,bb));
2.宏和函数的区别
宏是类型无关,可以频繁的用于执行简单的计算。函数不行。
eg: #define MALLOC(n,type) \
((type *)malloc((n)*sizeof(type)))
int *pi=MALLOC(25,int);
//int *pi=((int*)malloc((25)*sizeof(int)));
区别:(1)每使用一次,宏代码就插入到程序中一次,代码长度将增加;函数中代码只出现在一个地方,使用时,调用即可。
(2)宏的执行速度更快;函数存在函数调用/返回的额外开销。
(3)宏中邻近的操作符优先级会产生不可预料的结果。加do{}while(0);函数表达式求值结果更容易预测。
(4)参数每次用于宏定义时,都将重新进行求值,参数的副作用会带来不可预料的结果。函数参数则只在被调用时求一次值。
(5)宏与类型无关,函数的参数是与类型有关的。
3.编译链接的整个过程及每个过程
1.源文件(.c/.cpp)
2.预处理(.i):完成宏替换、头文件展开、去注释、条件编译。
3.编译(.s):生成汇编代码。
4.汇编(.o):将汇编指令转换为二进制。
5.链接:生成可执行程序。
- 关于预处理、宏和函数、编译链接的理解
- 预处理,宏,隐藏在背后的编译和链接
- 程序的预处理、编译、汇编和链接
- oc预处理和编译的理解
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接)
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- GCC编译的背后( 预处理和编译 汇编和链接 )
- 预处理、编译、汇编和链接
- gcc编译的背后(预处理、编译、汇编和链接) 一
- Installation with CocoaPods
- spark-sql 性能测试
- 我要玩石器多开的攻与防和外挂 ③
- FCM issues (Firebase Cloud Message)
- how to pase JSON in Swift
- 关于预处理、宏和函数、编译链接的理解
- Oracle数据库之一_多表查询
- JS 对象
- 206. Reverse Linked List
- 冒泡排序(Bubble Sort)
- 快速排序(Quick Sort)
- 简单选择排序(Simple Selection Sort)
- 堆排序(Heap Sort)
- (直接)插入排序(Insert Sort)