2016-03-15 6 views
1

Для последовательностиКак предотвратить cppcheck (v1.72) предупреждений для% "PRIi64" (% ДНУ) с int64_t переменной (cpcheck считает, что это знаковое целое) из stdint.h

typedef int64_t  I64; 
I64 i=5; 
printf("%"PRIi64",i); 

cppcheck дает предупреждение ниже:

предупреждение:% lld в строке формата (№ 1) требует «длинного длинного», но тип аргумента «подписанный int».

Makro PRIi64 разрешен lld, это правильно, но 64-битный целочисленный тип не принят как long long int.

Я надеюсь, что есть способ решить это, потому что мы получаем много таких предупреждений в нашем проекте и больше не видим настоящих ошибок.

+1

Что вы имеете в виду с «посторонней цитатой»? «PRIi64» берется из «inttypes.h» (C99) и обычно требуется для записи 32/64 бит независимого кода, потому что вам нужно% lld на 32 бит и% ld для 64-битных движков для int64_t (stdint.h). –

+1

Да, правильно, но это не имеет никакого отношения к моему реальному вопросу. Здесь более корректно: printf («somthing%» PRIi64 «else», i); –

ответ

0

Последняя версия Cppcheck не показано предупреждение о следующем примере кода:

void f(void) 
{ 
    typedef int64_t I64; 
    I64 i=5; 
    printf("%"PRIi64",i); 
}