首页 > 代码库 > C语言中的#define预处理指令
C语言中的#define预处理指令
本文链接:http://www.cnblogs.com/xxNote/p/4009460.html
今天看C Primer Plus里面看449页里面 16.2.1语言符号 讲到从技术方面看,系统把宏的主体当作语言符号类型字符串,而不是字符型字符串。这句话感到不是很理解,结合450页的那个例子自己写个小程序测试一下:
#include <stdio.h>#include <STDLIB.H>#define TEST 1 + 3#define TEST 1 + 3#define TEST 1+3int main(void){ printf("%d\n", TEST); return 0;}
编译一下会发现:
结合这个warning就容易理解了,对于第三行来说,宏的主体有三个分别是1 、+、 3共三个语言符号,第四行的宏主体的同样是1 、+、 3共三个语言符号,而不管这三个语言符号之间有几个空格或TAB制表符,但第五行的宏主体只有1+3一个语言符号,因此第五行出现警告说宏被重定义了,而第四行虽然重定义了但是宏的主体和原来是一样的所以没有报warning。对于宏的重定义不同编译器采用不通的策略。
C语言中的#define预处理指令
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。