I compiled the following c
program with gcc -ansi -pedantic -Wall test.c
:
#include <stdio.h>
#include <stdint.h>
#define BUFFER 21
int main(int argc, char* argv[]) {
uint64_t num = 0x1337C0DE;
char str[BUFFER]; /* Safely Holds UINT64_MAX */
if(argc > 1)
sscanf(argv[1],"%llu",&num);
sprintf(str,"%llu",num);
return 0;
}
And I receive the following warnings:
test.c:8:5: warning: ISO C90 does not support the ‘ll’ gnu_scanf length modifier
test.c:9:3: warning: ISO C90 does not support the ‘ll’ gnu_printf length modifier
What is the correct, C90
standards compliant, way to a parse/print 64 bit integer from/to a string,
which doesn't generate these warnings?
There is none. The largest integer type in C 90 is long
, which is only guaranteed to be at least 32 bits. Since there's no integer type guaranteed to be at least 64 bits, there's also no way to read a 64-bit integer in C90 either. Of course, long
could be 64 bits (it has been in at least one implementation, but there's no certainty that it is.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With