Правильный способ указания 64-битных целых чисел, который подходит как для GCC, так и для clang.C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Правильный способ указания 64-битных целых чисел, который подходит как для GCC, так и для clang.

Сообщение Гость »


Я компилирую код, использующий форматирование в стиле printf в C++ (2017). Базовый код, который работает без каких-либо предупреждений с помощью clang:

av_log(is, AV_LOG_VERBOSE, "Корректировка времени начала по %lld\n", new_start_time - is->start_time); ...но если я скомпилирую его с помощью GCC, я получу следующее предупреждение:

/Users/gabry/projects/wycoder/ffclass/ffclass.cpp:189:110: предупреждение: формат «%lld» ожидает аргумент типа «long long int», но аргумент 4 имеет тип «int64_t { он же long int}' [-Wformat=] av_log(is, AV_LOG_VERBOSE, "Исправление времени начала на %lld\n", new_start_time - is->start_time); ... Я нашел ответ на вопрос о переполнении стека, который предлагает изменить код на:

av_log(is, AV_LOG_VERBOSE, "Коррекция времени начала с помощью " PRId64 "\n", new_start_time - is->start_time); ... но если я изменю код таким образом, я получу еще одно предупреждение от GCC...

/Users/gabry/projects/wycoder/ffclass/ffclass.cpp:189:116: предупреждение: слишком много аргументов для формата [-Wformat-extra-args] av_log(is, AV_LOG_VERBOSE, "Исправление времени запуска с помощью " PRId64 "\n", new_start_time - is->start_time); Код работает корректно (в обоих направлениях), и я не хочу отключать -Wformat, поскольку он часто бывает полезен, но полезные предупреждения тонут в такого рода сообщениях... Есть идеи?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»