C99 stdint.h头文件和MS Visual Studio

119

令我惊讶的是,我刚刚发现从MS Visual Studio 2003开始就没有C99 stdint.h。我相信他们有他们的理由,但有没有人知道在哪里可以下载它?如果没有这个头文件,我就没有有用类型的定义,例如uint32_t等。


44
更新一下:MSVC 2010 现在包含了 stdint.h - Michael Burr
根据这篇博客:http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx,*VS 2015预览版完全支持C99标准库(唯一省略的是tgmath.h,它需要C编译器的魔法,并且与具有重载的C ++无关,以及需要编译器支持的CX_LIMITED_RANGE / FP_CONTRACT)*。 - vulcan raven
7个回答

85

14
一个MSVC的公共领域(不是MIT/BSD许可证 - 甚至不需要保留版权归属)stdint.h,这是从MinGW稍作修改后的版本: http://snipplr.com/view/18199/stdinth/ - Michael Burr
第一个链接返回404错误。 - Matthew Moisen
修改了原始答案,但是:https://github.com/mattn/gntp-send/blob/master/include/msinttypes/stdint.h SVN链接已经失效。 - smaudet

49

更新: Visual Studio 2010Visual C++ 2010 Express都有stdint.h。它可以在C:\Program Files\Microsoft Visual Studio 10.0\VC\include中找到。


3
同时也提供给喜欢在std::中使用的C++用户<cstdint>头文件。 - Adrian McCarthy

49

只需自己定义。

#ifdef _MSC_VER

typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;

#else
#include <stdint.h>
#endif

4
我漏掉了什么,还是应该这样写typedef unsigned __int64 uint64_t;? - Roman A. Taycher
1
为了使用字面值uint64_t,有用的是在Windows上#define U64(u) (u##ui64),否则#define U64(u) (u##ULL) - Niklas

25

Visual Studio 2003 - 2008 (Visual C++ 7.1 - 9)并不声称兼容C99。 (感谢rdentato的评论。)


11

1
boost是C++的库,问题是关于C99的。 - Remo.D
4
不太清楚——他在询问在Visual Studio中使用C99头文件,但没有指明使用哪种编程语言。无论如何都不可能是C99,因为微软不支持它。 - Nemanja Trifunovic
OP想要的是<stdint.h>的副本,而不是Boost头文件。 - jww

6

微软不支持C99,并且没有宣布任何计划。我认为他们打算跟踪C++标准,但认为C已经过时,除了作为C++的子集。

在Visual Studio 2003及更高版本中,新项目默认设置为“编译为C++代码(/TP)”选项,因此任何.c文件都将被编译为C++。


4

另一个便携式解决方案:

POSH:可移植开源工具包

"POSH是一个简单、便携、易于使用、易于集成、灵活、开源的“工具包”,旨在使编写跨平台库和应用程序变得更加轻松,更易于创建和移植。"

http://poshlib.hookatooka.com/poshlib/trac.cgi

正如Brian Hook所描述并在书中使用的那样:

编写可移植代码:为多个平台开发软件的介绍

作者:Brian Hook

http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason


1
从Poshlib维基百科文章中,链接授权为:用户名:guest,密码:guest123。 - JPaget
总共有3个提交,最后一个提交日期为2006年9月。 - AntoineL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接