我想知道我的Visual Studio C ++当前正在使用哪个C标准,但是在使用__STDC_VERSION__
预定义宏和其他C99预定义宏时遇到了麻烦-出现错误,表明未定义此标识符当我使用#ifndef __STDC_VERSION__
时,似乎没有定义。这是否表示我正在使用ANSI C?
以下是使用__STDC_VERSION__
的示例代码:
int main(void) {
printf("%d\n", __STDC_VERSION__);
return 0;
}
答案 0 :(得分:4)
Visual C ++完全支持的唯一C标准是ANSI-89 / ISO-90第一标准。 C99或C11没有官方支持;但是支持C99足以使C ++ 11和C ++ 14正常工作。
我用于源代码可移植性的是#ifdef _MSC_VER
,并且如果定义了它,则仅期望C89 / C90支持。 (如果需要更详细的信息,可以测试_MSC_VER的值以查看哪个版本。维基百科上有list of MSC/C++ versions and their _MSC_VER values。
显然,这必须在任何C99或C11宏之前进行测试。需要特别注意的是,如果Microsoft编译器定义了__STDC__
,那么您甚至不会获得对C99的部分支持。仅当使用/Za
选项进行编译时才定义该宏,该选项将禁用任何Microsoft扩展-包括诸如//
注释的C ++ / C99位,块中的混合声明和代码或{{1中的声明}}语句。