c语言学习笔记十九
来源:互联网 发布:淘宝买家客服电话 编辑:程序博客网 时间:2024/05/16 00:48
条件预处理指示
示例代码如下:
(头文件定义中)
#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
示例代码如下:
(头文件定义中)
#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语言学习笔记十九
- 学习笔记(十九)
- Object-C 学习笔记(十九)---#include 、#import 、@class
- Object-C 学习笔记(二十九)--- 归档(2)
- 【C++】学习笔记二十九——函数
- c语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C 语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- 点击ul下的li时alert其index值(闭包的应用)
- VC++ ADO调用存储过程方法
- javaScript的组成?
- C/C++语言函数学习(1):atexit、exit、return
- Visual Studio调试之断点基础篇
- c语言学习笔记十九
- 在servlet中,怎么处理系统异常?
- Windows batch脚本常用命令总结
- Sina微博 SSO登陆过程分析
- android logcat
- 什么时候会调用doGet,doPost ?哪些是get请求?get的特点?哪些是post请求?post请求的特点?
- linux下mysql使用整理
- 常见前端开发面试题
- 深入探究 WinRT 和 await