Почему macOS хочет, чтобы uint64 был длинным без знака, а Ubuntu хочет, чтобы uint64 был длинным без знака?

В настоящее время в моем macOS CI я получаю ошибка uint64 должна рассматриваться как unsigned long long

format specifies type 'unsigned long' but the argument has type 'uint64' (aka 'unsigned long long')

тогда как в моих Ubuntu 18.04 и 20.04 CI я получаю сообщение об ошибке uint64 следует рассматривать как unsigned long

format specifies type 'unsigned long long' but the argument has type 'uint64' (aka 'unsigned long')

Переключение между %lu и %llu в моем оператор печати исправит его для одного из них и, конечно же, сломает его для другого.

LOG_DEBUG("sql.sql", "SmartScript::ProcessAction: SMART_ACTION_SET_INST_DATA64: Field: %u, data: %lu",
                               e.action.setInstanceData64.field, targets->front()->GetGUID().GetRawValue());

Как это может быть и как я могу решить эту проблему?


person Kitzunu    schedule 21.06.2021    source источник
comment
может быть, у вас есть какой-то макрос, который переопределяет тип на что-то вроде #declare?   -  person Alberto Sinigaglia    schedule 21.06.2021
comment
Всегда включайте соответствующий код в вопрос, а не в виде ссылок на внешние веб-сайты. Внешние ссылки могут использоваться для получения дополнительной информации, но они со временем меняются и исчезают. Вся информация, необходимая для понимания вопроса, должна содержаться в самом вопросе.   -  person Eric Postpischil    schedule 21.06.2021
comment
Извините, если я закрыл пост как дубликат слишком поспешно (думал, что это C вместо C++, поэтому я случайно взмахнул молотком) ... может быть, ваш LOG_DEBUG не поддерживает спецификаторы формата <inttypes>? Однако, вероятно, да, поскольку они обычно выражаются в виде макросов, которые просто заменяют строковые литералы.   -  person Adrian Mole    schedule 21.06.2021
comment
@AdrianMole до сих пор не ясно, каким будет решение этой конкретной проблемы, честно говоря, я бы снова открыл этот вопрос.   -  person Francesco Borzi    schedule 21.06.2021
comment
@FrancescoBorzi Мое «предложение» состояло в том, чтобы использовать спецификатор формата PRu64, как указано в верхнем / принятом ответе. Но является ли это действительным C++ (это формально в стандарте C99). Это именно то, для чего были разработаны эти материалы формата PRxxx.   -  person Adrian Mole    schedule 21.06.2021
comment
Обратите внимание, что это определяет не ОС, а компилятор. Когда вы переходите на другую ОС, вы также переходите на другой компилятор. Часто компиляторы для одной и той же ОС применяют одни и те же соглашения, но, тем не менее, решение принимает компилятор.   -  person Pete Becker    schedule 21.06.2021
comment
@AdrianMole понял, спасибо. Исправить здесь: github.com/azerothcore/azerothcore-wotlk/pull/6479   -  person Francesco Borzi    schedule 21.06.2021