条件预处理指示
示例代码如下:
(头文件定义中)
#ifndef HEADER_FILENAME
#define HEADER_FILENAME
/*body of header */
#endif
也可以用于源代码的配置管理
/*在68000平台x定义为int */
#if MACHINE==68000
int x;
/*在8086平台x定义为long */
#end if MACHINE==8086
long x;
#else /*all others */
#error UNKNOWN TARGET MACHINE
#endif
取消一些宏的定义
#undef
其它预处理特性
#pragma供编译器实现阶一些非标准的特性
几个特殊的宏
_FILE_ 展开为当前源文件的文件名
_LINE_ 展开为当前代码的行号
示例代码如下:
检查条件test是否成立,如果不成立则调用_Assert函数
#undef assert /*remove existing definition*/
#ifdef NDEBUG
#define assert(test) ((void)0)
#else
void _Assert(char *);
#define _STR(x) _VAL(x)
#define _VAL(x) #x
#define assert(test) ((test)?(void)0 : _Assert(__FILE__":"_STR
(___LINE_)""#test))
#endif
/*自定义头文件使用" "*/
#include "assert.h"
int main(void){
assert(2>3);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void _Assert(char *mesg){
fputs(mesg,stderr);
fputs("-- assertion failed \n",stderr);
abort();
}
注:由_开头的标识符通常是由编译器和c语言库使用
编译文件查看运行结果
gcc test25.c test26.c
./a.out
运行结果
yuezhenhua@ubuntu:/opt/sdk/tc$ gcc test26.c
test27.cyuezhenhua@ubuntu:/opt/sdk/tc$ ./a.out
test27.c:___LINE_2>3-- assertion failed
已放弃
c99引入特殊标识符__fun__
示例代码如下:
#include <stdio.h>
void myfunc(){
printf("%s\n",__func__);
}
int main(void){
myfunc();
printf("%s\n",__func__);
return 0;
}
返回结果如下:
yuezhenhua@ubuntu:/opt/sdk/tc$ gcc test28.c
yuezhenhua@ubuntu:/opt/sdk/tc$ ./a.out
myfunc
main
c语言学习笔记十九
最新推荐文章于 2024-08-04 17:59:28 发布