C99 stdint.h标头和MS Visual Studio


113

令我惊讶的是,我刚刚发现MS Visual Studio 2003向上版本中缺少C99 stdint.h。我确定它们是有原因的,但是有人知道我可以在哪里下载副本吗?没有此标头,我将无法定义有用的类型,例如uint32_t等。


41
作为对此的更新:MSVC 2010现在包括stdint.h
Michael Burr

通过这个博客走向:blogs.msdn.com/b/vcblog/archive/2014/11/17/...VS 2015年预览完全支持C99标准库(与仅遗漏是tgmath.h,这就需要C编译器和魔法与具有重载的C ++和也需要编译器支持的CX_LIMITED_RANGE / FP_CONTRACT无关。
火神乌鸦

Answers:


82

原来您可以从以下位置下载此标头的MS版本:

https://github.com/mattn/gntp-send/blob/master/include/msinttypes/stdint.h

可以在这里找到便携式的:

http://www.azillionmonkeys.com/qed/pstdint.h

感谢Software Rambling的博客。


13
用于MSVC(MinGW的略微修改版本)的stdint.h的公共领域(不是MIT / BSD许可证-您甚至不需要保留版权归属):snipplr.com/view/18199/stdinth
Michael Burr

第一链接
404s

修改了原始答案,但是:github.com/mattn/gntp-send/blob/master/include/msinttypes/…svn链接已死
smaudet

46

只需自己定义即可。

#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 2010年

1
而要使用文字uint64_t值,则#define U64(u) (u##ui64)对Windows或#define U64(u) (u##ULL)其他情况很有用。
尼古拉斯




5

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

Visual Studio 2003和更高版本中的新项目默认情况下设置了“编译为C ++代码(/ TP)”选项,因此所有.c文件都将编译为C ++。


4

另一个便携式解决方案:

POSH:便携式开源工具

“ POSH是一种简单,可移植,易于使用,易于集成,灵活,开放源代码的“工具”,旨在使编写跨平台的库和应用程序的创建和移植工作大大减少。”

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

如本书中所描述和使用的:写可移植的代码:针对多种平台的软件开发简介Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-杰森


1
从Poshlib Wikipedia文章中,链接授权为:用户名:guest,密码:guest123
JPaget 2012年

总计3次提交,最后一次提交日期为2006年9月
AntoineL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.