C语言中#define定义的符号常量(明显常量)编译程序前真的被替换了吗?

#include <stdio.h>
#define A 123
#define B "ABC"
int main(void)
{
printf("%d\n",A); // 输出 123

printf("%s\n","A"); // 输出 A,为什么不是123,预处理在编译程序前不是应该把语句替换成 printf("%s\n","123"); 吗
printf("A\n"); // 输出 A,为什么不是123,预处理在编译程序前不是应该把语句替换成 printf("123\n"); 吗

printf("%s\n",B); // 输出 ABC

printf("B\n"); // 输出 B,为什么编译不报错,预处理在编译程序前不是应该把语句替换成 printf(""ABC""\n"); 吗
printf("%s\n","B"); // 输出 B,为什么编译不报错,预处理在编译程序前不是应该把语句替换成 printf("%s\n",""ABC""); 吗

printf("%s\n",""ABC""");

return 0;
}

为什么编译程序前,预处理器有时替换了符号常量,有时又没有替换符号常量?

第1个回答  2019-08-07
#define(即宏定义)是在程序预编译时执行替换功能,作用是加快程序运行速度,减少内存空间开销
第2个回答  2017-02-14
不会替换双引号内的宏,具体你可以加编译参数可以直接获取到替换之后的内容。追问

最近才开始学习C语言(Windows环境),很多地方都还不太明白,请问什么是宏,编译参数又该怎么弄?

本回答被网友采纳
相似回答