Tim*_*nes 35 c compiler-construction c99 visual-studio
这是众所周知,微软的Visual Studio编译器不支持C99,它看起来像他们有没有计划,以支持它.
但是,编译器确实包含一些樱桃挑选的功能,如可变参数宏和long long
- 请参阅此答案中的引号:
在我们收到许多关于某些C99功能的请求的地方,我们已经尝试实现它们(或类似物).一对夫妇的例子是复杂的宏,
long long
,__pragma
,__FUNCTION__
,和__restrict
.如果您在工作中发现其他C99功能,请告诉我们!我们没有从C用户那里听到太多,所以大声说出来并让自己听到- Arjun Bijanki,微软在ISO C标准委员会的代表 http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx
此外,较新版本的Visual Studio似乎附带了C99所需的一些标头.
关于特定功能有很多问题 - 但我不知道的是:在哪里可以找到当前MSVC编译器支持/提供的C99功能列表?
nwe*_*hof 34
幸运的是,微软在这个问题上的立场发生了变化.MSVC++ 12.0版(Visual Studio中2013的一部分)加入支持为
_Bool
类型.__func__
预定标识符.您可以检查_MSC_VER
宏的值是否大于或等于1800,以查看是否支持这些功能.
标准库的支持也进行了更新,主要是完成在MSVC 14.0(Visual Studio中2015年).
早期版本已经支持的东西(我认为至少从MSVC 7.1/Visual Studio 2003开始):
//
风格评论.long long
类型.仍然缺少的事情:
inline
关键字(您可以使用__inline
,但语义可能略有不同).restrict
关键字(您可以使用__restrict
).tgmath.h
._Complex
类型(C11中可选).我相信MSVC支持的C99(不在C90中)唯一的非库语言功能就是//
注释.除了在C模式下编译时,您将获得的唯一C99功能是由于Microsoft带来的C99库功能,因为这些功能是在MS编译器支持的C++标准/草案标准/ TR中引入的.例如,你进入stdint.h
了VS 2010,因为它是在C++ TR1草案中.
微软已经明确表示,他们看到市场上没有强推来分配资源,以支持C99的MSVC,所以几乎可以肯定的是C99的你会在MSVC的C编译器模式下看到的唯一的部分是那些得到带到因为在C++.
我觉得令人沮丧的一件事是,C库模式下无法使用已经长时间使用C++的非库C99语言功能.就个人而言,如果在编译C代码时只支持C99将语句与声明混合的能力,我会发现它非常有用.
但是,你今天在C和MSVC中看到的语言功能似乎就是你从这里得到的.
归档时间: |
|
查看次数: |
14546 次 |
最近记录: |