Cabeçalho C99 stdint.h e MS Visual Studio

113

Para minha surpresa, acabei de descobrir que o C99 stdint.h está faltando no MS Visual Studio 2003 em diante. Tenho certeza que eles têm seus motivos, mas alguém sabe onde posso baixar uma cópia? Sem este cabeçalho, não tenho definições para tipos úteis, como uint32_t, etc.

Roubar
fonte
41
Como uma atualização: MSVC 2010 agora incluistdint.h
Michael Burr
Visitando este blog: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview suporta totalmente a C99 Standard Library (com as únicas omissões sendo tgmath.h, que requer a mágica do compilador C e não é relevante para C ++, que tem sobrecarga, e CX_LIMITED_RANGE / FP_CONTRACT, que também requer suporte do compilador).
vulcan raven

Respostas:

82

Acontece que você pode baixar uma versão MS deste cabeçalho em:

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

Um portátil pode ser encontrado aqui:

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

Agradecimentos ao blog da Software Rambling .

Roubar
fonte
13
Um domínio público (não é uma licença MIT / BSD - você nem precisa manter uma atribuição de direitos autorais) stdint.h para MSVC (uma versão ligeiramente modificada do MinGW): snipplr.com/view/18199/stdinth
Michael Burr
O primeiro link 404s
Matthew Moisen
Modificou a resposta original, mas: github.com/mattn/gntp-send/blob/master/include/msinttypes/… o link svn está morto
smaudet
46

Basta defini-los você mesmo.

#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
fonte
4
Estou faltando alguma coisa ou não deveria ser typedef unsigned __int64 uint64_t; ?
Roman A. Taycher
1
E para usar valores uint64_t literais, é útil #define U64(u) (u##ui64)no Windows e em #define U64(u) (u##ULL)outros ambientes.
Niklas de
45

Atualização: Visual Studio 2010 e Visual C ++ 2010 Express têm stdint.h. Pode ser encontrado emC:\Program Files\Microsoft Visual Studio 10.0\VC\include

Ashwin Nanjappa
fonte
3
Bem como <cstdint> para usuários C ++ que gostam em std::.
Adrian McCarthy
23

O Visual Studio 2003-2008 (Visual C ++ 7.1-9) não afirma ser compatível com C99. (Obrigado a rdentato por seu comentário.)

Adam Mitz
fonte
11

Boost contém o arquivo de cabeçalho cstdint.hpp com os tipos que você está procurando: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp

Nemanja Trifunovic
fonte
1
boost é C ++, a questão está em C99
Remo.D
4
Não está claro - ele está perguntando sobre um cabeçalho C99 no Visual Studio, sem especificar qual linguagem ele está usando. Em qualquer caso, não pode ser C99 porque a Microsoft não o suporta.
Nemanja Trifunovic
OP quer uma cópia de <stdint.h>, não um cabeçalho Boost.
jww 01 de
5

A Microsoft não oferece suporte ao C99 e não anunciou planos para isso. Eu acredito que eles pretendem rastrear os padrões C ++, mas consideram C como efetivamente obsoleto, exceto como um subconjunto de C ++.

Novos projetos no Visual Studio 2003 e posterior têm a opção "Compilar como código C ++ (/ TP)" definida por padrão, portanto, todos os arquivos .c serão compilados como C ++.

Mike Dimmick
fonte
4

Outra solução portátil:

POSH: O chicote portátil de código aberto

"POSH é um" chicote "simples, portátil, fácil de usar, fácil de integrar, flexível e de código aberto, projetado para tornar a escrita de bibliotecas e aplicativos de plataforma cruzada significativamente menos tediosa para criar e transportar."

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

conforme descrito e usado no livro: Escreva código portátil: uma introdução ao desenvolvimento de software para várias plataformas Por Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason

Jason Harrison
fonte
1
Do artigo da Wikipedia Poshlib, a autorização do link é: nome de usuário: convidado, senha: convidado123
JPaget
Total geral de 3 commits, o último datado de setembro de 2006
AntoineL