有没有什么代码可以让我自己编写,或者有没有其他方法可以检查我的编译器正在编译的是哪一个C语言版本?我想知道是否有一种方法可以让我看到编译器的问题是C89,C99,C11,C18等,也许利用__STDC_VERSION__。
__STDC_VERSION__
nhjlsmyf1#
您可以查看__STDC_VERSION__宏,它的格式为YYYYMM,并从中推断您运行的是C89、C99、C11还是C18。另请参见What is the STDC_VERSION value for C11?
xdnvmnnf2#
如何检查我的编译器使用的是哪个版本的C?要检查标准版本,请使用__STDC__和__STDC_VERSION__。各种编译器还提供了特定于实现的宏,以便进一步细化。__STDC__随C89版本及更高版本提供。C94之前的兼容版本没有明确定义__STDC_VERSION__,因此它是一个long常量。发现的常见值包括:
__STDC__
long
199409L 199901L 201112L 201710L
把这些放在一起
#if defined(__STDC__) #if defined(__STDC_VERSION__) printf("Version %ld\n", __STDC_VERSION__); #else puts("Standard C - certainly 1989"); #endif #else puts("Pre 1989 or non-compliant C"); #endif
示例macro usage
2条答案
按热度按时间nhjlsmyf1#
您可以查看
__STDC_VERSION__
宏,它的格式为YYYYMM,并从中推断您运行的是C89、C99、C11还是C18。另请参见What is the STDC_VERSION value for C11?
xdnvmnnf2#
如何检查我的编译器使用的是哪个版本的C?
要检查标准版本,请使用
__STDC__
和__STDC_VERSION__
。各种编译器还提供了特定于实现的宏,以便进一步细化。__STDC__
随C89版本及更高版本提供。C94之前的兼容版本没有明确定义
__STDC_VERSION__
,因此它是一个long
常量。发现的常见值包括:
把这些放在一起
示例macro usage