C语言中#error与#line使用分析

--事物的难度远远低于对事物的恐惧!

    这个篇章我们来聊聊#error 和#line两个指令。

    #error 用于给程序员自定义特有的编译错误消息,用法为:#error message  (注意:message不需要双引号)

    示例: #error this is a error

    类似的还有#warning,用于生成一个编译警告

下边来看看#error的具体用法:

    -#error是一种预编译器指示字

    -#error可用于提示编译条件是否满足

来看看下边的代码:

#include <stdio.h>

#ifndef __cplusplus
    #error This file should be processed with C++ compiler.
#endif

class CppClass
{
private:
    int m_value;
public:
    CppClass()
    {
    }
    
    ~CppClass()
    {
    }
};

int main()
{
    return 0;
}

上边的代码,其实是一段C++代码,但是编译环境为C环境,那么我们编译结果如下:

从编译错误信息看,错误信息就是我们代码中自定的错误信息,这也就是为什么说#error给我们提示编译条件是否满足,而不至于因为编译条件不满足到处找原因。

说完了#error,现在来谈谈#line:

    -#line用于强制制定新的行号和编译文件名,并对源程序的代码重新编号

    -用法:#line number filename (filename可省略) 例如:#line 1 file.c

    -#line 编译指示字的本质是重定义__LINE__和__FILE__

当多个人同时编写工程项目时,我们可以使用#line指示字重定义文件名跟行号,以便能准确的寻找出出错代码是谁的、在在哪里。下边来看个例子,a.c、b.c、c.c三段代码分别有A、B、C三个人编写,并且对每个人编写的代码都进行了__FILE__ 与 __LINE__的重定义:

#include <stdio.h>

int main()
{
// The code section is written by A.
// Begin
#line 1 "a.c"
    printf("%s : %d\n", __FILE__, __LINE__);
// End

// The code section is written by B.
// Begin
#line 1 "b.c"
    printf("%s : %d\n", __FILE__, __LINE__);
// End

// The code section is written by Delphi.
// Begin
#line 1 "c.c"
    printf("%s : %d\n", __FILE__, __LINE__);
//End

    return 0;
}

执行结果如下:

由输出结果,三段代码已经被#line强制指定了新的行号和编译文件名。

 

总结:

    -#error用于自定义一条编译错误信息

    -#warning用于自定义一条编译警告信息

    -#error和#warning常用于条件编译的情形

    -#line用于强制指定新的行号编译文件名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值