There is no 64-bit type in C89
source link: https://sporks.space/2021/07/02/there-is-no-64-bit-type-in-c89/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
the sporks space
party with sporks in space
Brief post, but I was porting a C89 project to Visual C++ 6 (don’t ask) when I found something really fun. Turns out “long long
“, the type everyone assumes is the 64-bit type in C, is actually a GCC extension. MSVC uses… _int64
, a different extension. Great, had to convert a bunch of code. You’ll get this fun error from old MSVC when it sees it:
error C2632: 'long' followed by 'long' is illegal
(Note that MSVC will probably assume your C code is C++, which does mean you get some stuff from C99 for free like single-line comments… but then initializers are different between C and C++, and C++ only added long long
in C++11…)
It’s an unfortunate gotcha for those who assume they’re writing standards compliant C89. The reason might be deflated when you have to define your own 64-bit integer with #ifdef
. Oh, and let’s not forgot “long long” could mean 72-bit on your 9-bit byte system, of course. That’s why stdint.h
exists…. except, oh, C89.
Leave a Reply Cancel reply
Your email address will not be published. Required fields are marked *
Comment
Name *
Email *
Website
Save my name, email, and website in this browser for the next time I comment.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK