Вы можете условно определить форматер для вашего типа индекса:
#ifdef LONG_IDX
typedef long long int idx_type
#define IDX_FORMAT "lld"
#else
typedef int idx_type
#define IDX_FORMAT "d"
#endif
Тогда вам, конечно, нужно использовать это в вызовах форматирования, что может стать немного громоздким и (как всегда!) Требует от васбыть бдительным и не забывайте делать это правильно, когда вы хотите напечатать индекс:
idx_type my_index = 47;
print("my_index = %" IDX_FORMAT, my_index);
Обратите внимание, как вышеизложенное использует автоматическую конкатенацию C смежных строковых литералов для «сборки» правильной строки форматирования во время компиляции,Это типичное использование этой удивительной функции синтаксиса C.
Кроме того, если ваш компилятор достаточно хорош для форматирования проверки строк (GCC делает), вы, скорее всего, получите полезные предупреждения, если вы все испортите изабудьте где-нибудь использовать строку defined
.