Следующее не дает мне никакого предупреждения при компиляции с gcc 4.5.2 на машине x86 с Linux:
char foo = 255;
Но когда я использую -pedantic
, gcc говорит:
предупреждение: переполнение в неявном постоянном преобразовании
То, как gcc действует, немного странно, и это заставляет меня сомневаться, действительно ли я понимаю, что происходит в этом задании. Я думаю, что если char
длится 8 бит в POSIX, и он по умолчанию подписан, он не может удерживать 255
.
В стандарте C он говорит, что переполнение целых чисел без знака приводит к переполнению, но полное переполнение целых чисел undefined. Так это назначение undefined поведения? И почему gcc действует таким образом?