📜  C中带有示例的预定义宏

📅  最后修改于: 2021-05-25 18:29:29             🧑  作者: Mango

根据C89标准,C编程语言具有以下预定义的宏:

  1. __LINE__宏:__LINE__宏包含编译中程序的当前行号。它给出了被调用的行号。它用于生成日志语句,错误消息,引发异常和调试代码。每当编译器在编译中发现错误时,它都会首先使用__LINE__生成发生错误的行号,并打印错误消息以及行号,以便用户可以轻松地轻松修复该错误。
    #include 
    int main()
    {
        printf("Line number is: %d\n",
               __LINE__);
        return 0;
    }
    
    输出:
    Line number is: 5
    
  2. __FILE__宏:__FILE__宏保存计算机中当前正在执行的程序的文件名。它还用于调试,生成错误报告和日志消息。
    #include 
    int main()
    {
        printf("File name of this"
               " program is: %s\n",
               __FILE__);
        return 0;
    }
    
    输出:
  3. __DATE__宏:__DATE__宏给出该程序的源代码转换为目标代码的日期。简而言之,它返回程序的编译日期。日期的格式为mmm dd yyyy 。 mmm是缩写的月份名称。
    #include 
    int main()
    {
        printf("Program Compilation Date: %s\n",
               __DATE__);
        return 0;
    }
    
    输出:
    Program Compilation Date: Dec 26 2019
    
  4. __TIME__宏:__DATE__宏提供了编译程序的时间。时间的格式为hour:minute:second
    #include 
    int main()
    {
        printf("Time of compilation is: %s\n",
               __TIME__);
        return 0;
    }
    
    输出:
    Time of compilation is: 13:17:20
    
  5. __STDC__宏:__STDC__宏用于确认编译器标准。通常,它保持值为1,这表示编译器符合ISO标准C。
    #include 
    int main()
    {
        printf("Compiler Standard Number: %d\n",
               __STDC__);
        return 0;
    }
    
    输出:
    Compiler Standard Number: 1
    
  6. __STDC__HOSTED宏:如果编译器的目标是托管环境,则此宏的值将为1。托管环境是一种工具,第三方可以在其中保存编译数据并在其自己的计算机上运行程序。通常,该值设置为1。
    #include 
    int main()
    {
        printf("STDC_HOSTDED Number: %d\n",
               __STDC_HOSTED__);
        return 0;
    }
    
    输出:
    STDC_HOSTDED Number: 1
    
  7. __STDC_VERSION__ :此宏以yyyymmL的形式保存C标准的版本号,其中yyyy和mm是标准版本的年和月。这表示编译器符合哪个版本的C标准。
    Values hold by __STDC_VERSION__
    • 值199409L表示1994年修订的C89标准。这是当前的默认标准。
    • 值199901L表示C99标准
    • 值201112L表示2011年对C标准的修订

    当要求用户使用C89标准中的函数或头文件时,将更改这些标准值,而C89标准中已删除该文件或标头文件。编译器更改其执行标准并运行输出。

    请查看本文,该文章将更改标准以运行C89标准中声明的asctime_s()函数。

    #include 
    int main()
    {
        printf("Compiler Standard "
               "VERSION Number: %ld\n",
               __STDC_VERSION__);
        return 0;
    }
    
    输出:
    Compiler Standard VERSION Number: 201112
    

    C99标准中的预定义宏:

  8. __cplusplus :__cplusplus使用C++编译器时定义了宏。它用于测试标头是由C编译器还是C++编译器编译的。该宏的值类似于__STDC_VERSION__,因为它扩展为版本号。
    Values hold by __cplusplus
    • 1998 C++标准的199711L
    • 201103L适用于2011 C++标准
    • 201402L适用于2014 C++标准
    • 201703L适用于2017 C++标准
  9. __OBJC__宏:: __OBJC__如果正在使用Objective-C编译器,则宏的值为1。 __OBJC__用于测试标头是由C编译器还是由Objective-C编译器编译的。

参考: https : //gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。