根据C89标准,C编程语言具有以下预定义的宏:
- __LINE__宏:__LINE__宏包含编译中程序的当前行号。它给出了被调用的行号。它用于生成日志语句,错误消息,引发异常和调试代码。每当编译器在编译中发现错误时,它都会首先使用__LINE__生成发生错误的行号,并打印错误消息以及行号,以便用户可以轻松地轻松修复该错误。
#include
int main() { printf("Line number is: %d\n", __LINE__); return 0; } 输出:Line number is: 5
- __FILE__宏:__FILE__宏保存计算机中当前正在执行的程序的文件名。它还用于调试,生成错误报告和日志消息。
#include
int main() { printf("File name of this" " program is: %s\n", __FILE__); return 0; } 输出:File name of this program is: /usr/share/IDE_PROGRAMS/C/other/703ad0b087fbd7d18cde5ea81f148f36/703ad0b087fbd7d18cde5ea81f148f36.c
- __DATE__宏:__DATE__宏给出该程序的源代码转换为目标代码的日期。简而言之,它返回程序的编译日期。日期的格式为mmm dd yyyy 。 mmm是缩写的月份名称。
#include
int main() { printf("Program Compilation Date: %s\n", __DATE__); return 0; } 输出:Program Compilation Date: Dec 26 2019
- __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
- __STDC__宏:__STDC__宏用于确认编译器标准。通常,它保持值为1,这表示编译器符合ISO标准C。
#include
int main() { printf("Compiler Standard Number: %d\n", __STDC__); return 0; } 输出:Compiler Standard Number: 1
- __STDC__HOSTED宏:如果编译器的目标是托管环境,则此宏的值将为1。托管环境是一种工具,第三方可以在其中保存编译数据并在其自己的计算机上运行程序。通常,该值设置为1。
#include
int main() { printf("STDC_HOSTDED Number: %d\n", __STDC_HOSTED__); return 0; } 输出:STDC_HOSTDED Number: 1
- __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标准中的预定义宏:
- __cplusplus :__cplusplus使用C++编译器时定义了宏。它用于测试标头是由C编译器还是C++编译器编译的。该宏的值类似于__STDC_VERSION__,因为它扩展为版本号。
Values hold by __cplusplus
- 1998 C++标准的199711L
- 201103L适用于2011 C++标准
- 201402L适用于2014 C++标准
- 201703L适用于2017 C++标准
- __OBJC__宏:: __OBJC__如果正在使用Objective-C编译器,则宏的值为1。 __OBJC__用于测试标头是由C编译器还是由Objective-C编译器编译的。
参考: https : //gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。