LINUX.ORG.RU

gcc -Wlong-long x32

 


0

1
$ cat test.c 
#include <stdint.h>

uint64_t a = 0x0000000000000000;
uint64_t b = 0x8000000000000000;
$ gcc test.c -c -pedantic -Wall -Wextra -Wlong-long -Wunused -std=c99 -m32
test.c:4:1: warning: integer constant is too large for ‘long’ type [-Wlong-long]
 uint64_t b = 0x8000000000000000;
 ^

Как это победить? Суффиксы ULL и кастирование к uint64_t не подавляет варнинг.

Использую gcc (Debian 5.4.0-6) 5.4.0 20160609 и gcc (Debian 6.1.1-9) 6.1.1 20160705

★★★★

Warn if long long type is used. This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit the warning messages, use -Wno-long-long

Gvidon ★★★★
()
Ответ на: комментарий от quest

А ты хочешь избавиться от предупреждения или понять, почему оно выдаётся? Если первое, то просто добавь -Wno-long-long. По второму сложнее, похоже на баг компилятора, у меня 4.8.4 не ругается при -std=c99.

Gvidon ★★★★
()
Последнее исправление: Gvidon (всего исправлений: 1)
Ответ на: комментарий от Gvidon

То что можно просто убрать -Wlong-long я понял прежде чем писать сюда. Но возможно я что-то делаю не так и можно по другому подавить предупреждение либо это баг компилятора и может кто-то близкий к проекту gcc напишет им об этом

quest ★★★★
() автор топика
Ответ на: комментарий от quest

Согласно man gcc смысл -Wlong-long в том, что он предупреждает об использовании long long, т.е. в данном случае он делает, о чём попросили. Но для c99 этот флаг смысла особо не имеет так как этот тип есть в стандарте. Флаг предупреждает не о неправильном использовании, а просто об использовании.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

скорее включается -Wlong-long

quest ★★★★
() автор топика
Ответ на: комментарий от quest

он должен это делать если используется стандарт ниже чем c99

Нет, он должен это делать, если используется С90 ли С++98:

-Wlong-long
Warn if «long long» type is used. This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes. To inhibit the warning messages, use -Wno-long-long.

А также совершенно без необходимости, если ты заставишь, используя явный -Wlong-long вместо достаточного -pedantic. Т.е. xaizek прав.

gag ★★★★★
()
Ответ на: комментарий от quest

Смысл тут не причём. Предупреждение выводится безусловно при обнаружении long long, о чём и говорит man, как я его процитировал. Его не стоит использовать явно. При необходимости оно будет включено самими gcc.

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.