я составил следующую программу c
с gcc -ansi -pedantic -Wall test.c
:совместимый способ разобрать 64 разрядное целое число, используя sscanf с GCC
#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;
}
И я получаю следующие предупреждения:
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
Что такое правильный, C90
Соответствие стандартам, способ разбора/печати 64-битного целого числа от/до строки,
, который не генерирует эти предупреждения?
Тогда из моего понимания, я должен сделать код при минимальных 'стандартов C99' требованиям, если Мне нужно использовать 64-битные значения? –
@awashburn: Да - C99 был первым, кто предоставил тип, который был гарантирован как минимум 64 бита. –
@awashburn, а с C99 вы получаете правильные макросы для обработки 'uint64_t' в 'printf' и' scanf' бесплатно. Поскольку вы помещаете свой вопрос в gcc, в наши дни нет смысла не использовать C99, если у вас плохо написанный наследственный код. –