预定义宏

ASIC标准

__LINE__ 源代码行号
__FILE__ 源文件名
__DATE__ 编译日期
__TIME__ 编译时间
__STDC__ 当要求程序严格遵循ASIC C标准时该标志被赋值1
__cplusplus 当编写c++程序时该标志符被定义


gcc标准

__FILE__
__LINE__
__FUNCTION__
__BASE_FILE__ 标志主输入文件的名字,对于源文件__FILE__和__BASE_FILE__是一样的,对于头文件两者可能不同。比如__BASE_FILE__这个宏在myassert.h头文件中定义,被main.c和func.c文件包含之后__BASE_FILE__分别变成了main.c和fun.c,如果我们需要知道myassert.h这个宏具体在哪个文件中定义的话,就需要用到__BASE_FILE__了。
__DATE__
__TIME__
__TIMESTAMP__ 和__TIME__的格式相同,用于得到本文件最后一次被修改的时间。
__GNUC__、__GNUC_MINOR__、__GNUC_PATCHLEVEL__用于得到GNU版本
__VERSION__用于得到编译器的版本
__COUNTER__自身计数器,常用于记录以前编译过程中出现的__COUNTER__的次数,从0开始
__INCLUDE_LEVEL__用于表示文件被包含的计数,从0开始递增,常作为递归包含的限制条件。

http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros
http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predefined-Macros
以上部分摘自:http://blog.csdn.net/sealyao/article/details/6169568


__FILE__打印绝对路径名?

在日志中使用__FILE__来显示源码的文件名,可是他显示了绝对路径名,这样使得整个log看起来很长,这个其实和编译器有关,由于编译目录和源码目录不同,所以实际在编译的时候使用的是源码的绝对路径,以致打印出来就是绝对路径了。

#include < stdio.h>
int main()
{
printf(“%s %d\n”, __FILE__, __LINE__);
return 0;
}

使用源码的全路径编译:
gcc -o filetest /srv/example/test/filetest.c
执行结果:
./filetest
/srv/example/test/filetest.c, 5

改变编译方式:
gcc -o filetest filetest.c
执行结果:
./filetest
filetest.c, 5

对于项目而言,改动一下会牵动很多东西,那么可以对__FILE__进行一些操作:

#define __FILENAME__ (strrchr(__FILE__, ‘/’) ? (strrchr(__FILE__, ‘/’) + 1):__FILE__)

测试代码修改如下:

#include < string.h>
#include < stdio.h>

#define __FILENAME__ (strrchr(__FILE__, ‘/’) ? (strrchr(__FILE__, ‘/’) + 1):__FILE__)

int main(int argc, char **argv)
{
printf(“%s, %d\n”, __FILENAME__, __LINE__);

return 0;
}

执行结果:
./filetest
filetest.c, 8

以上部分摘自:http://segmentfault.com/a/1190000000600442

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值