`

c语言学习笔记十九

    博客分类:
  • c
c 
阅读更多

条件预处理指示


示例代码如下:


(头文件定义中)
#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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics