Как предотвратить предупреждения cppcheck (v1.72) для% PRIi64 (% lld) с переменной int64_t (cpcheck считает, что это подписанный int) в stdint.h

Для последовательности

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

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

предупреждение:% lld в строке формата (№ 1) требует 'long long', но тип аргумента - 'signed int'.

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

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


person Falk Reichbott    schedule 15.03.2016    source источник
comment
Что значит посторонняя цитата? PRIi64 взят из inttypes.h (C99) и обычно требуется для написания 32/64-битного независимого кода, потому что вам нужен% lld на 32-битном и% ld на 64-битном движке для int64_t (stdint.h).   -  person Falk Reichbott    schedule 23.03.2016
comment
Да, правильно, но это не имеет ничего общего с моим настоящим вопросом. Вот правильнее: printf (somthing% PRIi64 else, i);   -  person Falk Reichbott    schedule 23.03.2016


Ответы (1)


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

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