C语言中的__FILE__、__LINE__和#line、__FUNCTION__
C语言中的__FILE__用以指示本行语句所在源文件的文件名,举例如下(test.c): #include <stdio.h> int main() { printf("%s\n",__FILE__); } 在gcc编译生成a.out,执行后输出结果为: test.c 在windows的vc6.0下编译执行结果为: c:\documents and settings\administrator\桌面\test.c ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- C语言中的__LINE__用以指示本行语句在源文件中的位置信息,举例如下: #include <stdio.h> main() { printf("%d\n",__LINE__); printf("%d\n",__LINE__); printf("%d\n",__LINE__); }; 该程序在linux用gcc编译,在windows的vc6.0下编译都可以通过,执行结果都为: 7 8 9 还可以通过语句#line来重新设定__LINE__的值,举例如下: #include <stdio.h> #line 200 main() { printf("%d\n",__LINE__); printf("%d\n",__LINE__); printf("%d\n",__LINE__); }; 编译执行后输出结果为: 202 203 204 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 另外gcc还支持__func__,它指示所在的函数,但是这个关键字不被windows下的vc6.0支持,举例如下: #include <stdio.h> void main() { printf("this is print by function %s\n",__func__); } 其编译后输出结果为 this is print by function main 注意 “#line”、 “__LINE__”、 “__FILE__" 及 “__func__" 都是大小写敏感的。 把 __FILE__,__LINE__,__FUNCTION__加入到mail.c中 # cat main.c
# gcc -Wall funca.c funcb.c main.c # ./a.out main.c(4)-main: this is main this is function main.c(6)-main: this is main this is function main.c(8)-main: this is main |