Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

you can use macros SCNu64 and PRIu64 in <inttypes.h>, for your example, they can be

sscanf(argv[1],"%" SCNu64,&num);
sprintf(str,"%" PRIu64,num);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top