头文件里有下面的定义:
10 #ifndef INTERFACE_VERSION
11 #define INTERFACE_VERSION __LINE__
12 #else
13 #error "INTERFACE_VERSION was defined elsewhere!"
14 #endif
期望源文件包含该头文件后,得到的INTERFACE_VERSION是11,而不是访问处的代码行。
例如:
25 printf("INTERFACE_VERSION=%d", INTERFACE_VERSION);
打印INTERFACE_VERSION=11而不是25。
请问INTERFACE_VERSION宏应该怎么定义呢?
__LINE__是C中预定义的宏,标识当前的所在行,它总是会在编译时解析成当前行的数值。而宏定义的特性是编译时将宏替换成宏主体,并不会解析宏主体的值,这不像变量可以动态赋值。
以你的情况为例,在25行使用了INTERFACE_VERSION,是在11行定义的,所以此时的__LINE__是11,从而11行会被替换成:
#define INTERFACE_VERSION 11
故而25行将会解析成:
printf("INTERFACE_VERSION=%d", 11);
如果想要获得11行的结果,你可以考虑在11行的位置用变量记录当前的__LINE__值,后续再使用该变量就可以,如:
const int temp = __LINE__;
printf("INTERFACE_VERSION=%d", temp);
谢谢xiangqian010,定义变量的方法正是我后来想到的。分就给你啦!
头文件是包含在源文件中的,并且是宏是预编译的,__LINE__肯定是指预编译之后的行数,