C语言中的#define预处理指令
本文链接:http://www.cnblogs.com/xxNote/p/4009460.html
今天看C Primer Plus里面看449页里面 16.2.1语言符号 讲到从技术方面看,系统把宏的主体当作语言符号类型字符串,而不是字符型字符串。这句话感到不是很理解,结合450页的那个例子自己写个小程序测试一下:
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> #include <STDLIB.H> #define TEST 1 + 3 #define TEST 1 + 3 #define TEST 1+3 int main( void ) { printf ( "%d\n" , TEST); return 0; } |
编译一下会发现:
结合这个warning就容易理解了,对于第三行来说,宏的主体有三个分别是1 、+、 3共三个语言符号,第四行的宏主体的同样是1 、+、 3共三个语言符号,而不管这三个语言符号之间有几个空格或TAB制表符,但第五行的宏主体只有1+3一个语言符号,因此第五行出现警告说宏被重定义了,而第四行虽然重定义了但是宏的主体和原来是一样的所以没有报warning。对于宏的重定义不同编译器采用不通的策略。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步