#line,#error,__func__的使用

3.1.2.0 #error指令
1、格式
#error 消息
如果遇见#error它会显示一条包含消息的出错信息。请看下例:
#if后面值为0#line,#error,__func__的使用_第1张图片
编译后不产生错误#line,#error,__func__的使用_第2张图片
将!去掉#line,#error,__func__的使用_第3张图片
会产生错误#line,#error,__func__的使用_第4张图片
3.1.2.1 #line指令
1、格式
形式一:#line n(1 形式二:#line n “文件”
它的作用是改变程序行编号方式,也可以使这条指令让编译器认为他正在从一个有不同名字的文件中读取程序。请看下例:
将上个例子第一行加上#line 2#line,#error,__func__的使用_第5张图片
请对比产生错误的行,这次变成了第4行,因为此时程序行从2开始计数,且#line行不计数
#line,#error,__func__的使用_第6张图片
形式二产生错误后相应指向另一文件的某行。
3.1.2.2 __func__标识符(c99)
这个标识符与编译器无关,但是它有助于调试。
每个函数都可以访问这个标识符,它的作用是存储当前函数的名字,相当于以下声明:

static const char __func__[]="函数名字"

他可以跟踪函数的调用:

#define funstart() printf("%s is start",__func__)
#define funend() printf("%s is end",__func__)
void fun(void)
{
	funstart();
	...
	funend();
}

这样就可以知道函数什么时候开始与结束了

你可能感兴趣的:(杂记)