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.


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 .


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

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


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.)


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


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 ++.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.