C99 stdint.h header และ MS Visual Studio


113

ด้วยความประหลาดใจของฉันฉันเพิ่งค้นพบว่า C99 stdint.h หายไปจาก MS Visual Studio 2003 ขึ้นไป ฉันแน่ใจว่าพวกเขามีเหตุผล แต่มีใครรู้บ้างว่าฉันสามารถดาวน์โหลดสำเนาได้ที่ไหน? หากไม่มีส่วนหัวนี้ฉันไม่มีคำจำกัดความสำหรับประเภทที่มีประโยชน์เช่น uint32_t เป็นต้น


41
สำหรับการอัปเดตนี้: MSVC 2010 รวมถึงstdint.h
Michael Burr

ไปตามบล็อกนี้: blogs.msdn.com/b/vcblog/archive/2014/11/17/… , VS 2015 Preview รองรับไลบรารีมาตรฐาน C99 อย่างสมบูรณ์ (โดยมีการละเว้นเพียง tgmath.h ซึ่งต้องใช้เวทมนตร์คอมไพเลอร์ C และ ไม่เกี่ยวข้องกับ C ++ ซึ่งมีการโอเวอร์โหลดและ CX_LIMITED_RANGE / FP_CONTRACT ซึ่งต้องการการสนับสนุนคอมไพเลอร์ด้วย)
vulcan raven

คำตอบ:


82

ปรากฎว่าคุณสามารถดาวน์โหลดเวอร์ชัน MS ของส่วนหัวนี้ได้จาก:

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

แบบพกพาสามารถพบได้ที่นี่:

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

ขอบคุณบล็อกของSoftware Rambling


13
โดเมนสาธารณะ (ไม่ใช่ใบอนุญาต MIT / BSD - คุณไม่จำเป็นต้องเก็บแหล่งที่มาของลิขสิทธิ์ไว้ด้วยซ้ำ) stdint.h สำหรับ MSVC (เวอร์ชันดัดแปลงเล็กน้อยจาก MinGW): snipplr.com/view/18199/stdinth
Michael Burr

ลิงค์แรก
404s

แก้ไขคำตอบเดิม แต่: github.com/mattn/gntp-send/blob/master/include/msinttypes/…ลิงก์ svn ตายแล้ว
smaudet

46

เพียงแค่กำหนดพวกเขาด้วยตัวคุณเอง

#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
ฉันขาดอะไรไปหรือไม่ควรพิมพ์ผิดไม่ได้ลงชื่อ __int64 uint64_t; ?
Roman A.Taycher

1
และในการใช้ค่า uint64_t ตามตัวอักษรมันจะมีประโยชน์#define U64(u) (u##ui64)สำหรับ Windows และ#define U64(u) (u##ULL)อื่น ๆ
Niklas

45

อัปเดต: Visual Studio 2010และVisual C ++ 2010 Expressมีstdint.h. สามารถพบได้ในC:\Program Files\Microsoft Visual Studio 10.0\VC\include


3
เช่นเดียวกับ <cstdint> สำหรับผู้ใช้ C ++ ที่ชอบในstd::.
Adrian McCarthy

23

Visual Studio 2003-2008 (Visual C ++ 7.1 - 9) ไม่ได้อ้างว่าเข้ากันได้กับ C99 (ขอบคุณ rdentato สำหรับความคิดเห็นของเขา)


11

Boost มีไฟล์ส่วนหัว cstdint.hpp พร้อมประเภทที่คุณกำลังมองหา: http://www.boost.org/doc/libs/1_36_0/boost/cstdint.hpp


1
boost คือ C ++ คำถามอยู่ที่ C99
Remo.D

4
ไม่ชัดเจน - เขากำลังถามเกี่ยวกับส่วนหัว C99 ใน Visual Studio โดยไม่ระบุว่าเขาใช้ภาษาใด ไม่ว่าในกรณีใดก็ไม่สามารถเป็น C99 ได้เนื่องจาก Microsoft ไม่สนับสนุน
Nemanja Trifunovic

OP ต้องการสำเนา<stdint.h>ไม่ใช่ส่วนหัว Boost
jww

5

Microsoft ไม่สนับสนุน C99 และยังไม่ได้ประกาศแผนใด ๆ ฉันเชื่อว่าพวกเขาตั้งใจจะติดตามมาตรฐาน C ++ แต่ถือว่า C ล้าสมัยอย่างมีประสิทธิภาพยกเว้นเป็นส่วนย่อยของ C ++

โปรเจ็กต์ใหม่ใน Visual Studio 2003 และใหม่กว่ามีตัวเลือก "คอมไพล์เป็นรหัส C ++ (/ TP)" ที่ตั้งค่าโดยค่าเริ่มต้นดังนั้นไฟล์. c ใด ๆ จะถูกคอมไพล์เป็น C ++


4

โซลูชันแบบพกพาอื่น:

POSH: สายรัดโอเพนซอร์สแบบพกพา

"POSH เป็น" สายรัด "แบบโอเพนซอร์สที่เรียบง่ายพกพาสะดวกง่ายต่อการผสานรวมและยืดหยุ่นซึ่งออกแบบมาเพื่อให้การเขียนไลบรารีและแอปพลิเคชันข้ามแพลตฟอร์มไม่น่าเบื่อในการสร้างและพอร์ตอย่างมาก"

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

ตามที่อธิบายและใช้ในหนังสือ: Write portable code: บทนำเกี่ยวกับการพัฒนาซอฟต์แวร์สำหรับหลายแพลตฟอร์ม By Brian Hook http://books.google.ca/books?id=4VOKcEAPPO0C

-Jason


1
จากบทความ Poshlib Wikipedia การอนุญาตลิงก์คือ: username: guest, password: guest123
JPaget

การกระทำทั้งหมด 3 ครั้งสุดท้ายวันที่กันยายน 2549
AntoineL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.