Вопрос по gcc, c++ – Можно ли отключить поддержку использования логических операторов «и» / «или» в gcc?

5

Похоже, что GCC разрешает "и" / "или" вместо "& amp; & amp;" / & quot; || & quot; в коде C ++; однако, как я и ожидал, многие компиляторы (особенно MSVC 7) не поддерживают это. Тот факт, что GCC допускает это, вызвал у нас некоторые неудобства в связи с тем, что у нас есть разные разработчики, работающие над одной и той же кодовой базой на нескольких платформах, и иногда эти «ошибки» проскальзывать, когда люди переключаются между Python и C ++.

В идеале, мы все помним использовать соответствующий синтаксис, но для тех ситуаций, когда мы иногда ошибаемся, было бы очень хорошо, если бы GCC не позволил этому скользить. У кого-нибудь есть идеи по поводу подходов к этому?

Если & quot; и & quot; и "или" это просто #defines, тогда я мог бы #undef при использовании GCC, но я боюсь, что он скорее встроен в компилятор на более фундаментальном уровне.

Благодарю.

Ваш Ответ

4   ответа
0

е на FxCop? С помощью FxCop вы можете написать свои собственные правила (проверьте наличие &&) и настроить его запуск на этапе предварительной компиляции.

-3

-pedantic-errors может помочь в этом, среди других гнуизмов.

-1: это не гнуизм, это часть языкового стандарта. John Bartholomew
17

этот ответ StackOverflow (который цитирует соответствующие части стандарта).

В другом ответе на этот же вопрос упоминается, как поступить наоборот: заставить их работать в MSVC.

Чтобы отключить их в GCC, используйте-fno-operator-names. Обратите внимание, что, делая это, вы фактически переходите на нестандартный диалект C ++, и есть риск, что вы в конечном итоге будете писать код, который может некорректно компилироваться на компиляторах, совместимых со стандартом (например, если вы объявите переменная с именем, которое обычно зарезервировано).

7

.

Слова стандартные в C, если вы включаете заголовок<iso646.h>.

MSVC не оказывает вам никакой помощи, не поддерживая стандарты.

Вы можете, однако, использовать инструменты для принудительного неиспользования ключевых слов. И это может быть руководством по кодированию, и вы можете быстро научить свою команду не делать глупых ошибок переносимости. Не так сложно избежать проблемы.

Похожие вопросы