C99 stdint.h 头文件和 MS Visual Studio

Posted

技术标签:

【中文标题】C99 stdint.h 头文件和 MS Visual Studio【英文标题】:C99 stdint.h header and MS Visual Studio 【发布时间】:2010-09-12 16:20:31 【问题描述】:

令我惊讶的是,我刚刚发现 MS Visual Studio 2003 及更高版本中缺少 C99 stdint.h。我敢肯定他们有他们的理由,但有人知道我在哪里可以下载副本吗?如果没有这个标头,我就没有有用类型的定义,例如 uint32_t 等。

【问题讨论】:

对此的更新:MSVC 2010 现在包括 stdint.h 来自这个博客:blogs.msdn.com/b/vcblog/archive/2014/11/17/…,VS 2015 Preview 完全支持 C99 标准库(唯一的遗漏是 tgmath.h,它需要 C 编译器魔法并且与 C++ 无关它具有重载,而 CX_LIMITED_RANGE/FP_CONTRACT 也需要编译器支持)。 【参考方案1】:

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

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

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

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

感谢Software Ramblings 博客。

【讨论】:

一个公共域(不是 MIT/BSD 许可证 - 你甚至不需要保留版权归属)用于 MSVC 的 stdint.h(来自 MinGW 的稍微修改的版本):snipplr.com/view/18199/stdinth 第一个链接404s 修改了原来的答案,但是:github.com/mattn/gntp-send/blob/master/include/msinttypes/… svn 链接失效了【参考方案2】:

只需自己定义即可。

#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

【讨论】:

我是否遗漏了什么或者不应该是 typedef unsigned __int64 uint64_t; ? 要使用文字 uint64_t 值,在 Windows 上使用 #define U64(u) (u##ui64) 和在其他情况下使用 #define U64(u) (u##ULL) 很有用。【参考方案3】:

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

【讨论】:

以及 供喜欢 std:: 的 C++ 用户使用。【参考方案4】:

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

【讨论】:

【参考方案5】:

Boost 包含 cstdint.hpp 头文件,其中包含您要查找的类型:http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

【讨论】:

boost 是 C++,问题在 C99 不清楚 - 他在询问 Visual Studio 中的 C99 标头,但未指定他使用的是哪种语言。无论如何它不可能是 C99,因为微软不支持它。 OP 想要 &lt;stdint.h&gt; 的副本,而不是 Boost 标头。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

另一种便携式解决方案:

POSH:便携式开源工具

“POSH 是一个简单、可移植、易于使用、易于集成、灵活的开源“工具”,旨在大大减少编写和移植跨平台库和应用程序的繁琐。”

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

如书中描述和使用的: 编写可移植代码:针对多平台开发软件的介绍 布莱恩·胡克 http://books.google.ca/books?id=4VOKcEAPPO0C

-杰森

【讨论】:

来自Poshlib Wikipedia文章,链接授权为:用户名:guest,密码:guest123 总共 3 个提交,最后一个日期为 2006 年 9 月

以上是关于C99 stdint.h 头文件和 MS Visual Studio的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 未找到 stdint.h 文件!

uint32_t 和 u_int32_t 的区别

Debian 上没有 stdint.h 文件

编译错误:“stdint.h:没有这样的文件或目录”

VC6:致命错误 C1083:无法打开包含文件:“stdint.h”

001:数据类型头文件