120

To my amazement I just discovered that the C99 stdint.h is missing from MS Visual Studio 2003 upwards. I'm sure they have their reasons, but does anyone know where I can download a copy? Without this header I have no definitions for useful types such as uint32_t, etc.

2
  • 44
    As an update to this: MSVC 2010 now includes stdint.h Commented Nov 24, 2010 at 3:12
  • Going by this blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/…, VS 2015 Preview fully supports the C99 Standard Library (with the only omissions being tgmath.h, which requires C compiler magic and is not relevant to C++ which has overloading, and CX_LIMITED_RANGE/FP_CONTRACT which also require compiler support). Commented Dec 14, 2014 at 3:48

7 Answers 7

86

Turns out you can download a MS version of this header from:

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

A portable one can be found here:

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

Thanks to the Software Ramblings blog.

NB: The Public Domain version of the header, mentioned by Michael Burr in a comment, can be find as an archived copy here. An updated version can be found in the Android source tree for libusb_aah.

Sign up to request clarification or add additional context in comments.

3 Comments

A public domain (not an MIT/BSD license - you don't even need to keep a copyright attribution around) stdint.h for MSVC (a slightly modified version from MinGW): snipplr.com/view/18199/stdinth
The first link 404s
Modified the original answer but: github.com/mattn/gntp-send/blob/master/include/msinttypes/… the svn link is dead
50

Update: Visual Studio 2010 and Visual C++ 2010 Express both have stdint.h. It can be found in C:\Program Files\Microsoft Visual Studio 10.0\VC\include

1 Comment

As well as <cstdint> for C++ users who like it in std::.
50

Just define them yourself.

#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

2 Comments

Am I missing something or shouldn't it be typedef unsigned __int64 uint64_t; ?
And to use literal uint64_t values it is useful to #define U64(u) (u##ui64) on Windows and to #define U64(u) (u##ULL) otherwise.
25

Visual Studio 2003 - 2008 (Visual C++ 7.1 - 9) don't claim to be C99 compatible. (Thanks to rdentato for his comment.)

Comments

11

Boost contains cstdint.hpp header file with the types you are looking for: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

3 Comments

boost is C++, the question is on C99
It is not clear - he is asking about a C99 header in Visual Studio, without specifying which language he is using. In any case it can't be C99 because Microsoft does not support it.
OP wants a copy of <stdint.h>, not a Boost header.
6

Microsoft do not support C99 and haven't announced any plans to. I believe they intend to track C++ standards but consider C as effectively obsolete except as a subset of C++.

New projects in Visual Studio 2003 and later have the "Compile as C++ Code (/TP)" option set by default, so any .c files will be compiled as C++.

Comments

4

Another portable solution:

POSH: The Portable Open Source Harness

"POSH is a simple, portable, easy-to-use, easy-to-integrate, flexible, open source "harness" designed to make writing cross-platform libraries and applications significantly less tedious to create and port."

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

as described and used in the book: Write portable code: an introduction to developing software for multiple platforms By Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

2 Comments

From Poshlib Wikipedia article, the link authorization is:username: guest, password: guest123
Grand total of 3 commits, last one dated September 2006

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.