Tiêu đề C99 stdint.h và MS Visual Studio


113

Trước sự ngạc nhiên của tôi, tôi vừa phát hiện ra rằng C99 stdint.h bị thiếu trong MS Visual Studio 2003 trở lên. Tôi chắc rằng họ có lý do của họ, nhưng có ai biết tôi có thể tải xuống một bản sao ở đâu không? Nếu không có tiêu đề này, tôi không có định nghĩa cho các loại hữu ích như uint32_t, v.v.


41
Như một bản cập nhật cho điều này: MSVC 2010 hiện bao gồmstdint.h
Michael Burr

Theo blog này: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview hỗ trợ đầy đủ Thư viện tiêu chuẩn C99 (với thiếu sót duy nhất là tgmath.h, yêu cầu phép trình biên dịch C và không liên quan đến C ++ có quá tải và CX_LIMITED_RANGE / FP_CONTRACT cũng yêu cầu hỗ trợ trình biên dịch).
vulcan raven

Câu trả lời:


82

Hóa ra bạn có thể tải xuống phiên bản MS của tiêu đề này từ:

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

Một cái xách tay có thể được tìm thấy ở đây:

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

Cảm ơn blog của Software Rambling .


13
Miền công cộng (không phải giấy phép MIT / BSD - bạn thậm chí không cần phải giữ lại ghi nhận bản quyền) stdint.h cho MSVC (phiên bản sửa đổi một chút từ MinGW): snipplr.com/view/18199/stdinth
Michael Burr

Các 404s liên kết đầu tiên
Matthew Moisen

Đã sửa đổi câu trả lời ban đầu nhưng: github.com/mattn/gntp-send/blob/master/include/msinttypes/… liên kết svn đã chết
smaudet

46

Chỉ cần xác định chúng cho chính mình.

#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
Tôi có thiếu thứ gì đó hay không, nó có phải là typedef unsigned __int64 uint64_t; ?
Roman A. Taycher

1
Và để sử dụng các giá trị uint64_t theo nghĩa đen, điều này rất hữu ích #define U64(u) (u##ui64)trên Windows và các mặt #define U64(u) (u##ULL)khác.
Niklas

45

Cập nhật: Visual Studio 2010Visual C ++ 2010 Express đều có stdint.h. Nó có thể được tìm thấy trongC:\Program Files\Microsoft Visual Studio 10.0\VC\include


3
Cũng như <cstdint> dành cho người dùng C ++ thích nó std::.
Adrian McCarthy

23

Visual Studio 2003-2008 (Visual C ++ 7.1 - 9) không tuyên bố là tương thích C99. (Cảm ơn rdentato vì nhận xét của anh ấy.)


11

Boost chứa tệp tiêu đề cstdint.hpp với các loại bạn đang tìm kiếm: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp


1
boost là C ++, câu hỏi về C99
Remo.D. 24/09/08

4
Nó không rõ ràng - anh ấy đang hỏi về tiêu đề C99 trong Visual Studio, mà không chỉ định ngôn ngữ anh ấy đang sử dụng. Trong mọi trường hợp, nó không thể là C99 vì Microsoft không hỗ trợ nó.
Nemanja Trifunovic 24-08

OP muốn một bản sao của <stdint.h>, không phải một tiêu đề Boost.
jww

5

Microsoft không hỗ trợ C99 và chưa công bố bất kỳ kế hoạch nào. Tôi tin rằng họ có ý định theo dõi các tiêu chuẩn C ++ nhưng coi C là lỗi thời thực sự ngoại trừ như một tập con của C ++.

Các dự án mới trong Visual Studio 2003 trở lên có tùy chọn "Biên dịch dưới dạng C ++ Mã (/ TP)" được đặt theo mặc định, vì vậy mọi tệp .c sẽ được biên dịch dưới dạng C ++.


4

Một giải pháp di động khác:

POSH: Khai thác nguồn mở di động

"POSH là một" khai thác "mã nguồn mở đơn giản, di động, dễ sử dụng, dễ tích hợp, linh hoạt, được thiết kế để giúp cho việc tạo và chuyển các thư viện và ứng dụng đa nền tảng trở nên bớt tẻ nhạt hơn đáng kể."

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

như được mô tả và sử dụng trong sách: Viết mã di động: phần giới thiệu về phát triển phần mềm cho nhiều nền tảng của Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason


1
Từ bài viết Poshlib Wikipedia, sự cho phép liên kết là: username: guest, mật khẩu: guest123
JPaget

Tổng cộng 3 cam kết, lần cuối cùng vào tháng 9 năm 2006
AntoineL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.