Отредактировано для удаления первого предупреждения
Следующий код работает, как и ожидалось, в g ++ 4.4.0 под mingw32:
#include <cstdio>
int main()
{
long long x = 0xdeadbeefc0defaceLL ;
printf ("%llx\n", x) ;
}
Но если я включу все предупрежденияс -Wall
он говорит:
f.cpp: In function 'int main()':
f.cpp:5: warning: unknown conversion type character 'l' in format
f.cpp:5: warning: too many arguments for format
То же самое с %lld
.Исправлено ли это в более новых версиях?
Отредактировано снова, чтобы добавить:
Предупреждение не исчезнет, если я укажу -std=c++0x
, даже если (i) long long
стандартный тип, и (ii) %lld
и %llx
официально поддерживаются.Например, из 21.5 Числовые преобразования пункт 7:
Each function returns a string object holding the character representation of the value of
its argument that would be generated by calling sprintf(buf, fmt, val) with a format specifier of
"%d", "%u", "%ld", "%lu", "%lld", "%llu", "%f", "%f", or "%Lf", respectively, where buf designates
an internal character buffer of sufficient size.
Так что это ошибка, конечно?