2009-07-01 6 views
5

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

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

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

Спасибо.

ответ

16

Они являются частью стандарта C++, см., Например, this StackOverflow answer (который цитирует соответствующие части стандарта).

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

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

0

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

7

Слова являются стандартными в C++ без включения какого-либо заголовка.

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

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

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

-3

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

+1

-1: Это не gnu-ism, это часть стандарта языка. –

 Смежные вопросы

  • Нет связанных вопросов^_^