Типы _ExtInt
- это новая функция в Clang (LLVM), как описано в Новая функция Clang _ExtInt
обеспечивает точные целочисленные битовые типы , опубликовано 2020-04-21 (3 дня a go, как я набираю).
Если _ExtInt(32)
- это 32-разрядный целочисленный тип со знаком, а int
- это 32-разрядный целочисленный тип со знаком, то вы можете использовать %d
и не приводить в обоих случаях. звонки на printf()
. Аргументы после формата подчиняются правилам целочисленного продвижения, поэтому я ожидаю, что и _ExtInt(13)
, и _ExtInt(32)
будут преобразованы в int
, поскольку они передаются в printf()
, поэтому правильный спецификатор преобразования - %d
.
Если вы используете более крупные типы, вплоть до _ExtInt(64)
, вы, вероятно, можете использовать %lld
на любой машине (или %ld
на 64-битной машине). Если вы go больше этого, вы сами по себе; вам нужна реализация printf()
, которая знает, как обрабатывать типы _ExtInt
, и, вероятно, будет иметь нотации в формате, позволяющем указывать длину. Например, дико выдвигая гипотезу, он может поддерживать %<700>d
для подписанного _ExtInt(700)
.