Intestazione C99 stdint.h e MS Visual Studio


113

Con mio grande stupore ho appena scoperto che lo stdint.h C99 manca da MS Visual Studio 2003 in poi. Sono sicuro che abbiano le loro ragioni, ma qualcuno sa dove posso scaricare una copia? Senza questa intestazione non ho definizioni per tipi utili come uint32_t, ecc.


41
Come aggiornamento a questo: MSVC 2010 ora includestdint.h
Michael Burr

Seguendo questo blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview supporta completamente la libreria standard C99 (con le uniche omissioni tgmath.h, che richiede la magia del compilatore C e non è rilevante per C ++ che ha il sovraccarico e CX_LIMITED_RANGE / FP_CONTRACT che richiedono anche il supporto del compilatore).
corvo vulcaniano

Risposte:


82

Risulta che puoi scaricare una versione MS di questa intestazione da:

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

Uno portatile può essere trovato qui:

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

Grazie al blog di Software Rambling .


13
Un dominio pubblico (non una licenza MIT / BSD - non è nemmeno necessario mantenere un'attribuzione di copyright in giro) stdint.h per MSVC (una versione leggermente modificata da MinGW): snipplr.com/view/18199/stdinth
Michael Burr

Il primo collegamento 404
Matthew Moisen

Modificata la risposta originale ma: github.com/mattn/gntp-send/blob/master/include/msinttypes/… il collegamento svn è morto
smaudet

46

Definiscili tu stesso.

#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
Mi manca qualcosa o non dovrebbe essere typedef unsigned __int64 uint64_t; ?
Roman A. Taycher

1
E per usare valori letterali uint64_t è utile #define U64(u) (u##ui64)su Windows e in #define U64(u) (u##ULL)altro modo.
Niklas

45

Aggiornamento: Visual Studio 2010 e Visual C ++ 2010 Express hanno entrambi stdint.h. Può essere trovato inC:\Program Files\Microsoft Visual Studio 10.0\VC\include


3
Oltre a <cstdint> per gli utenti C ++ a cui piace std::.
Adrian McCarthy

23

Visual Studio 2003-2008 (Visual C ++ 7.1 - 9) non dichiara di essere compatibile con C99. (Grazie a rdentato per il suo commento.)


11

Boost contiene il file di intestazione cstdint.hpp con i tipi che stai cercando: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp


1
boost è C ++, la domanda è su C99
Remo.D

4
Non è chiaro: sta chiedendo informazioni su un'intestazione C99 in Visual Studio, senza specificare la lingua che sta utilizzando. In ogni caso non può essere C99 perché Microsoft non lo supporta.
Nemanja Trifunovic

OP vuole una copia di <stdint.h>, non un'intestazione Boost.
jww

5

Microsoft non supporta C99 e non ha annunciato alcun piano per farlo. Credo che intendano tenere traccia degli standard C ++ ma considerano C effettivamente obsoleto tranne come sottoinsieme di C ++.

I nuovi progetti in Visual Studio 2003 e versioni successive hanno l'opzione "Compila come codice C ++ (/ TP)" impostata per impostazione predefinita, quindi tutti i file .c verranno compilati come C ++.


4

Un'altra soluzione portatile:

POSH: il cablaggio open source portatile

"POSH è un" cablaggio "open source semplice, portatile, facile da usare, facile da integrare, flessibile, progettato per rendere la scrittura di librerie e applicazioni multipiattaforma molto meno noiosa da creare e portare".

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

come descritto e utilizzato nel libro: Scrivi codice portatile: un'introduzione allo sviluppo di software per più piattaforme Di Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason


1
Dall'articolo Poshlib di Wikipedia, l'autorizzazione al collegamento è: nome utente: guest, password: guest123
JPaget

Complessivamente 3 commit, l'ultimo datato settembre 2006
AntoineL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.