1.问题由来:
本人一直以为宏对于字符串的处理也是直接在预处理时进行替换;但是最近在工作中遇到了字符串宏+1的情况;于是彻底的颠覆了以前的思维;于是乎进行测试验证得出以下结果。
2.测试代码
/*测试*/#include<stdio.h>#define HELLO "hello" int main() { printf("%s\n",HELLO+1); return 0 ; }
3.现实的输出结果:
“ello” ;
实际上,宏定义的字符串常量在预编译的时候把HELLO替换成字符串常量(“hello”);所以HELLO+1可以理解为“hello”+1 即常量首地址+1,故输出“ello”.