我如何知道VS2019编译器支持哪个C版本?我查看了项目C / C ++和Linker命令行,未找到-std = Cxx标志。编译以下代码:
for (int i = index; i < nb_users - 1; i++) {
users[i] = users[i + 1];
}
所以我根据this 猜测它是C99,但是有没有办法在VS2019中的某处进行检查?
答案 0 :(得分:2)
VS2019支持ANSI C90以及C ++所需的一些更高标准的其他一些功能。
例如,您可以使用以下代码告诉MSVC不完全支持C99,它将无法编译:
int foo(int n, char *s)
{
char s2[n];
strcpy(s2, s);
return !strcmp(s, s2);
}
MSVC不支持此特定功能(可变长度数组),而您提到的功能(for
循环初始声明)则受支持。
答案 1 :(得分:0)
VS2019编译器支持哪个版本的C?
充其量是C 1989。
可以通过__STDC__
__STDC_VERSION__
的值来识别符合C标准的编译器。
#ifndef __STDC__
printf("Does not ID itself as compliant to any C standard.\n");
#else
printf("Compliant to some C standard\n");
#ifndef __STDC_VERSION__
printf("C 1989\n");
#else
// Expected values of of 2019
// 199409L
// 199901L
// 201112L
// 201710L
printf("C %ld\n", __STDC_VERSION__);
#endif
#endif
我希望VS2019不会确定自己符合任何C标准或1989年标准。
__ STDC __ 仅当编译为C且指定了/Za编译器选项时才定义为1。否则,未定义。 Predefined macros
VS2019不在此incomplete list of C compilers
上