문제

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.

다른 팁

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top