Опции компилятора GCC -wno-four-char-constants и -wno-multichar

Не удалось найти документацию по -Wno-four-char-constantsОднако я подозреваю, что это похоже на -Wno-multichar, Я прав?

1 ответ

Решение

Они связаны, но не одно и то же.

Компиляция с -Wall --pedantic Флаги, назначение:

int i = 'abc';

производит:

предупреждение: многосимвольная символьная константа [-Wmultichar]

как с GCC, так и с CLANG, при этом:

 int i = 'abcd';

производит:

Предупреждение GCC: константа из нескольких символов [-Wmultichar]

Предупреждение CLANG: константа из нескольких символов [-Wfour-char-constants]


Стандарт (стандарт C99 с исправлениями TC1, TC2 и TC3, подраздел 6.4.4.4 - символьные константы) гласит:

Значение целочисленной символьной константы, содержащей более одного символа (например, 'ab'), [...] определяется реализацией.

Мульти-символ всегда разрешается int но, поскольку порядок, в котором персонажи упакованы в один int не указано, переносимое использование многосимвольных констант затруднено (точное значение зависит от реализации).

Кроме того, компиляторы отличаются тем, как они обрабатывают неполные мульти-символы (такие как 'abc').

Некоторые компиляторы дополняются слева, некоторые справа, независимо от порядка байтов (некоторые компиляторы могут вообще не заполняться).

Кто-то, кто может принять проблемы переносимости полного мульти-символа, может в любом случае хотеть предупреждение для неполного (-Wmultichar -Wno-four-char-constants).

Другие вопросы по тегам