C99 stdint.h header dan MS Visual Studio

113

Yang mengejutkan saya, saya baru saja menemukan bahwa C99 stdint.h hilang dari MS Visual Studio 2003 ke atas. Saya yakin mereka punya alasannya sendiri, tetapi adakah yang tahu di mana saya dapat mengunduh salinannya? Tanpa tajuk ini saya tidak memiliki definisi untuk jenis yang berguna seperti uint32_t, dll.

rampok
sumber
41
Sebagai pembaruan untuk ini: MSVC 2010 sekarang mencakupstdint.h
Michael Burr
Pergi oleh blog ini: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview sepenuhnya mendukung C99 Standard Library (dengan satu-satunya kelalaian tgmath.h, yang memerlukan sihir penyusun C dan tidak relevan dengan C ++ yang kelebihan beban, dan CX_LIMITED_RANGE / FP_CONTRACT yang juga membutuhkan dukungan kompilator).
gagak vulcan

Jawaban:

82

Ternyata Anda dapat mengunduh versi MS dari header ini dari:

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

Yang portabel dapat ditemukan di sini:

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

Berkat blog Software Rambling .

rampok
sumber
13
Domain publik (bukan lisensi MIT / BSD - Anda bahkan tidak perlu menyimpan atribusi hak cipta di sekitar) stdint.h untuk MSVC (versi yang sedikit dimodifikasi dari MinGW): snipplr.com/view/18199/stdinth
Michael Burr
Tautan pertama 404
Matthew Moisen
Mengubah jawaban asli tetapi: github.com/mattn/gntp-send/blob/master/include/msinttypes/… tautan svn sudah mati
smaudet
46

Definisikan saja sendiri.

#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
Nicholas Mancuso
sumber
4
Apakah saya melewatkan sesuatu atau tidak seharusnya mengetikef unsigned __int64 uint64_t; ?
Roman A. Taycher
1
Dan untuk menggunakan nilai uint64_t literal, ini berguna untuk #define U64(u) (u##ui64)Windows dan #define U64(u) (u##ULL)sebaliknya.
Niklas
45

Pembaruan: Visual Studio 2010 dan Visual C ++ 2010 Express keduanya memiliki stdint.h. Itu dapat ditemukan diC:\Program Files\Microsoft Visual Studio 10.0\VC\include

Ashwin Nanjappa
sumber
3
Serta <cstdint> untuk pengguna C ++ yang menyukainya std::.
Adrian McCarthy
23

Visual Studio 2003 - 2008 (Visual C ++ 7.1 - 9) tidak mengklaim kompatibel dengan C99. (Terima kasih kepada rdentato atas komentarnya.)

Adam Mitz
sumber
11

Boost berisi file header cstdint.hpp dengan jenis yang Anda cari: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

Nemanja Trifunovic
sumber
1
boost adalah C ++, pertanyaannya ada di C99
Remo.D
4
Tidak jelas - dia bertanya tentang header C99 di Visual Studio, tanpa menentukan bahasa yang dia gunakan. Bagaimanapun itu tidak bisa menjadi C99 karena Microsoft tidak mendukungnya.
Nemanja Trifunovic
OP menginginkan salinan <stdint.h>, bukan header Boost.
jww
5

Microsoft tidak mendukung C99 dan belum mengumumkan rencana apa pun untuk itu. Saya yakin mereka bermaksud untuk melacak standar C ++ tetapi menganggap C sudah usang secara efektif kecuali sebagai bagian dari C ++.

Proyek baru di Visual Studio 2003 dan yang lebih baru memiliki opsi "Compile as C ++ Code (/ TP)" yang ditetapkan secara default, sehingga file .c apa pun akan dikompilasi sebagai C ++.

Mike Dimmick
sumber
4

Solusi portabel lainnya:

POSH: Portable Open Source Harness

"POSH adalah" harness "sumber terbuka yang sederhana, portabel, mudah digunakan, mudah diintegrasikan, fleksibel, dan bersumber terbuka yang dirancang untuk membuat penulisan pustaka dan aplikasi lintas platform tidak terlalu membosankan untuk dibuat dan dipindahkan."

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

seperti yang dijelaskan dan digunakan dalam buku: Menulis kode portabel: pengantar pengembangan perangkat lunak untuk berbagai platform Oleh Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

Jason Harrison
sumber
1
Dari artikel Wikipedia Poshlib, otorisasi tautannya adalah: nama pengguna: tamu, kata sandi: guest123
JPaget
Total keseluruhan 3 komitmen, yang terakhir tanggal September 2006
AntoineL