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

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

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

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

    示例: #error this is a error

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

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

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

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

来看看下边的代码:

#include 

#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环境,那么我们编译结果如下:

C语言中#error与#line使用分析_第1张图片

从编译错误信息看,错误信息就是我们代码中自定的错误信息,这也就是为什么说#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 

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;
}

执行结果如下:

C语言中#error与#line使用分析_第2张图片

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

 

总结:

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

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

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

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

 

你可能感兴趣的:(C语言进阶浅析,C语言,C语言高级篇,C语言进阶剖析)