作者:Triste夏木_668_365 | 来源:互联网 | 2022-12-07 03:25
有人可以建议为什么Visual Studio 2017不支持C11新功能_Generic
吗?我发现它是一个非常有用的功能,但不能在Visual Studio 2017中使用.
以下是示例代码:
#include
#define MYTYPE(X) _Generic((X),\
int:"int",\
float:"float",\
double:"double",\
default:"other")
int main(void)
{
int d = 5;
printf("%s\n", MYTYPE(d));
printf("%s\n", MYTYPE(2.0*D));
return 0;
}
编译器会给出以下警告和错误:
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>predef.c
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(11): warning C4013: '_Generic' undefined; assuming extern returning int
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(11): error C2059: syntax error: 'type'
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(12): error C2065: 'D': undeclared identifier
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(12): error C2059: syntax error: 'type'
1>Done building project "Project1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
msc..
7
Visual Studio 2017不支持任何C11功能.您可以将Intel C编译器插入Visual Studio(支持C11)或使用Clang或Gcc.
Quora回答:
在Visual Studio中添加内置的CLANG支持
创建新项目
在"平台工具集"的项目属性(常规)中选择"Visual Studio 2017 - 与Microsoft CodeGen一起使用(v141_clang_c2)
在C/C++"语言"部分打开"C语言"标准列表,在这里您可以找到所有C标准今天相关的C89,C99,C11 ...选择您想要的那个
在此之后(与以往一样)VS2017将编译扩展名为".c"的文件作为C,将".cpp"扩展名编译为C++.
不要忘记,也可以在每个文件的基础上更改属性.
Lundin..
5
这是因为Microsoft从未优先考虑符合C语言标准.在过去的20年左右,他们主要关注的是C++.因此Visual Studio应被视为C++编译器.
在"C模式"下,它仍然对第一个C标准C90有疑问.他们花了很长时间才试图获得C99合规性,他们仅在近几年才为此做出了一些努力.它仍然不完全符合C99标准.据我所知,没有C11或C17合规计划.
因此,如果标准一致性对您很重要,则必须寻找另一个C编译器.
1> msc..:
Visual Studio 2017不支持任何C11功能.您可以将Intel C编译器插入Visual Studio(支持C11)或使用Clang或Gcc.
Quora回答:
在Visual Studio中添加内置的CLANG支持
创建新项目
在"平台工具集"的项目属性(常规)中选择"Visual Studio 2017 - 与Microsoft CodeGen一起使用(v141_clang_c2)
在C/C++"语言"部分打开"C语言"标准列表,在这里您可以找到所有C标准今天相关的C89,C99,C11 ...选择您想要的那个
在此之后(与以往一样)VS2017将编译扩展名为".c"的文件作为C,将".cpp"扩展名编译为C++.
不要忘记,也可以在每个文件的基础上更改属性.
2> Lundin..:
这是因为Microsoft从未优先考虑符合C语言标准.在过去的20年左右,他们主要关注的是C++.因此Visual Studio应被视为C++编译器.
在"C模式"下,它仍然对第一个C标准C90有疑问.他们花了很长时间才试图获得C99合规性,他们仅在近几年才为此做出了一些努力.它仍然不完全符合C99标准.据我所知,没有C11或C17合规计划.
因此,如果标准一致性对您很重要,则必须寻找另一个C编译器.