• 第23课 #error和#line使用分析


    #error的用法:

    示例程序:

     1 #include <stdio.h>
     2 
     3 #ifndef __cplusplus
     4     #error This file should be processed with C++ compiler.
     5 #endif
     6 
     7 class CppClass
     8 {
     9 private:
    10     int m_value;
    11 public:
    12     CppClass()
    13     {
    14         
    15     }
    16     
    17     ~CppClass()
    18     {
    19     }
    20 };
    21 
    22 int main()
    23 {
    24     return 0;
    25 }

    先注释掉3-5行的代码,使用gcc编译结果如下:

    当出现这样的编译错误后不一定是我们的代码错了,可能是我们的编译器用错了。比如我们使用了开源代码或者第三方库经常会出现这样的错误。这样的错误我们不好定位,甚至看不懂这样的错误信息,这时我们只需要加上第3-5行的代码,然后再进行编译。

    加上3-5行的程序后,gcc编译结果如下:

    #error在条件编译中的应用:

     1 #include <stdio.h>
     2 
     3 void f()
     4 {
     5 #if ( PRODUCT == 1 )
     6     printf("This is a low level product!
    ");
     7 #elif ( PRODUCT == 2 )
     8     printf("This is a middle level product!
    ");
     9 #elif ( PRODUCT == 3 )
    10     printf("This is a high level product!
    ");
    11 #endif
    12 }
    13 
    14 int main()
    15 {
    16     f();
    17     
    18     printf("1. Query Information.
    ");
    19     printf("2. Record Information.
    ");
    20     printf("3. Delete Information.
    ");
    21 
    22 #if ( PRODUCT == 1 )
    23     printf("4. Exit.
    ");
    24 #elif ( PRODUCT == 2 )
    25     printf("4. High Level Query.
    ");
    26     printf("5. Exit.
    ");
    27 #elif ( PRODUCT == 3 )
    28     printf("4. High Level Query.
    ");
    29     printf("5. Mannul Service.
    ");
    30     printf("6. Exit.
    ");
    31 #endif
    32     
    33     return 0;
    34 }

    我们在编译的时候如果忘记了定义PRODUCT宏,也可以编译通过,但运行结果不是我们想要的,我们希望在没有定义PRODUCT宏的时候,程序编译报错。

    我们修改程序,加入#error编译错误信息:

    当我们不定义PRODUCT宏直接编译时,结果如下:

    这正是我们想要的结果。

    #line的用法

    #line在现代编译器中基本不再使用了。

     使用示例:

    以前的程序由多人开发,而且都写在一个文件中,出现编译错误时不知道是谁的程序出错了,所以引入了#line。

     小结:

  • 相关阅读:
    我的学习之路_第八章_map集合
    我的学习之路_第七章_list集合,set集合
    我的学习之路_第六章_迭代器,泛型
    我的学习之路_第五章_Data,正则
    我的学习之路_第四章_异常
    我的学习之路_第三章_匿名内部类
    我的学习之路_第二章_接口/多态
    如何使用电脑上的谷歌浏览器来调试安卓手机上的移动端页面
    跨域之jsonp
    跨域之同源策略 Same-origin policy
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9536966.html
Copyright © 2020-2023  润新知