1. 常考:预处理阶段只进行文本替换,不进行运算
对于最后一条,预处理指令定义的标识符都不会占据内存。预处理指令也称预编译指令,即在编译之前进行一些处理,而预处理做的其实就是文本替换,这个过程也叫做宏展开,即用宏定义后面的替换体将程序中出现宏的地方替换掉。
例如,#define 定义的明示变量就是在预处理阶段用标识符后面的值替换标识符,因此不会占据内存。例如,上面程序中将在预处理阶段将 printf("%d\n%s\n", A1, S1); 替换成 printf("%d\n%s\n", 300, "Hello, World");
在这个文本替换过程中需要注意的一点是,#define 只执行文本替换,不执行计算!这个考点在各种笔试中都经常碰到。例如:
// 例2.
#include<stdio.h>
#define SUM 3+4
int main()
{
int a = SUM * SUM;
printf("%d\n", a);
return 0;
}
————————————————
2. 运行结果是 19,而不是 49。因为预处理阶段预处理器将 SUM 替换成 3+4,经过预处理之后的程序为 int a = 3 + 4 * 3 + 4;
,在运行阶段程序才进行计算,此时根据运算符优先级,先算 * 的部分,因此 a 的值为 3+12+4,即 19。
版权声明:
本文为CSDN博主「柚咖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40395874/article/details/120911036