打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c 语言预处理器
C Language Preprocessor Predefined Macro

c 语言的预处理器定义了很多宏,这些宏被扩展后会产生特定的信息,在调试程序时非常有用。

预定义宏列表

 预定义宏 描述
 __DATE__ (字符串常量)预处理的日期,格式为 Mmm dd yyyy
 __TIME__ (字符串常量)预处理的时间,格式为 hh:mm:ss
  __FILE__
 (字符串常量)当前源文件的文件名
 __LINE__ (整数常量)在当前源文件中的行号
 __STDC__ (整数常量)设置为 1
 __STDC_HOSTED__ (整数常量)设置为 1
 __STDC_VERSION__ (整数常量)遵循 C99 标准时设置为 199901L 注释 1
  
注释 1
C90 标准没有此预定义宏。

注释 2
C99 标准新的修订版本增加了其它的环境预定义宏,这里不详细叙述,请参考 C99 标准。

示例 1

test.c 文件的内容如下
/*
predefined macro
*/

#include <stdio.h>

void main(void)
{
printf("(__DATE__) : %s\n", __DATE__);
printf("(__TIME__) : %s\n", __TIME__);
printf("(__FILE__) : %s\n", __FILE__);
printf("(__LINE__) : %d\n", __LINE__);
printf("(__STDC__) : %d\n", __STDC__);
printf("(__STDC_HOSTED__) : %d\n", __STDC_HOSTED__);

#if __STDC_VERSION__ == 199901
printf("(__STDC_VERSION__) : %ld\n", __STDC_VERSION__);
#endif
}

执行结果如下

malihou@ubuntu:~$
malihou@ubuntu:~$ gcc -std=c90 test.c
malihou@ubuntu:~$
malihou@ubuntu:~$ ./a.out
(__DATE__) : Nov 25 2012
(__TIME__) : 18:35:23
(__FILE__) : test.c
(__LINE__) : 12
(__STDC__) : 1
(__STDC_HOSTED__) : 1
malihou@ubuntu:~$
malihou@ubuntu:~$ gcc -std=c99 test.c
malihou@ubuntu:~$
malihou@ubuntu:~$ ./a.out
(__DATE__) : Nov 25 2012
(__TIME__) : 18:35:32
(__FILE__) : test.c
(__LINE__) : 12
(__STDC__) : 1
(__STDC_HOSTED__) : 1
(__STDC_VERSION__) : 199901
malihou@ubuntu:~$


C9X 标准提供了一个名为 __func__ 的预定义标识符(predefined identifier),__func__ 展开后代表该标识符所在的函数名。该标识符具有函数作用域。而预处理器定义的宏具有文件作用域。因而 __func__ 是 c 语言的预定义标识符,而非预定义宏。

示例 2

test.c 文件的内容如下
/*
predefined macro & identifier
*/

void main(void)
{
printf("file is %s\n", __FILE__);
printf("function is %s\n", __func__);
}

对 test.c 进行预处理之后,得到如下内容
malihou@ubuntu:~$ 
malihou@ubuntu:~$ gcc -E test.c
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"




void main(void)
{
printf("file is %s\n", "test.c");
printf("function is %s\n", __func__);
}
malihou@ubuntu:~$
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
02选择题: 多态
指针作为参数传递
简单总结C语言中各种类型的指针的概念
C++比C牛逼的七个点
C\C |指针详述及实例分析
指针
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服