#define中带参替换的细节问题.替换参数中带双引号出现的问题
首先是这个问题的代码:程序代码:
#include <stdio.h> #define PRN(x) printf("x\n"); int main(void) { PRN(Hello from main()); return 0; }从问题本身可以看到,想要输出Hello from main().
但是在实际输出中,输出的是x.
通过cc -E foo.c 发现被替换的部分出现一个问题.在执行时候的实际程序成了printf("x\n");.
书中的提示说标识符PRN并不是由预处理器产生的.请找出原因并修改代码.
我知道使用"字符串化"可以解决这个问题:
程序代码:
#include <stdio.h> #define PRN(x) printf(#x"\n"); /*此处用 #x 就可以了*/ int main(void) { PRN(Hello from main()); return 0; }
但是我不能理解原因,特别是说这个标识符不是由预处理器产生的.我不能理解.请各位帮帮忙,谢谢