Скорее всего, ваша библиотека C, в частности ее реализация printf
, не поддерживает C99.
Тип long long int
и формат %lld
были введены стандартом ISO C 1999 года (C99). Использование gcc -std=c99
заставляет компилятор пытаться соответствовать C99, но не может заставить библиотеку времени выполнения делать вещи, которые она не реализует. У вас есть несоответствие между тем, что поддерживает компилятор, и тем, что поддерживает библиотека времени выполнения.
В C90 вызов printf
с %lld
в строке формата имел неопределенное поведение.
Имеет %ld
работать для аргумента типа long int
? Если аргумент не превышает LONG_MAX
, преобразование и использование %ld
может быть хорошим обходным путем. Если вам нужно напечатать значения, которые превышают LONG_MAX
, реализация преобразования long long int
в строку не будет ужасно сложной.