Как заставить компилятор Xcode 3.1 предупреждать об операторе присваивания в операторе if?

StackOverflow https://stackoverflow.com/questions/1405669

Вопрос

Я пытался найти документацию и Интернет, насколько это было возможно, но мне не удалось заставить компилятор Xcode выдавать предупреждение, если в операторе if используется оператор присваивания.

Я родом из RealBasic, где у меня очень сильная привычка набирать такого рода сравнения:

if x = 5 then ...

В C, конечно, этот синтаксис присваивает x значение 5, затем проверяет результат, чтобы убедиться, что он не равен нулю, и «правильный» оператор:

if (x == 5) { ... }

Я нашел несколько упоминаний о том, что компилятор должен иметь возможность предупреждать о присвоении, сделанном при сравнении if, но я не могу найти, как включить его в Xcode 3.1/gcc.Я нашел -pedantic вариант, но, похоже, это не вызвало предупреждение.

Поскольку я уже дважды потратил немало времени на отслеживание ошибок, которые оказались «=" вместо «==", мне бы хотелось получить предупреждение.

Я знаю, что могу сделать это вместо этого (что вызовет ошибку компилятора):

if (5 = x) { ... }

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

Спасибо!

Это было полезно?

Решение 2

Ссылка в ответе ennuikiller привела к тому, что мне было нужно.

Вот еще немного информации для тех, кто может найти это в будущем:

  • Предупреждение компилятора: «Отсутствуют фигурные скобки и круглые скобки» или -Wparentheses.

  • Предупреждение включается при выборе Get Info для текущего цель в Xcode.

  • Как я наконец узнал, iPhone Simulator SDK делает нет показать этот вариант компилятора.

  • Переключение SDK на устройство iPhone покажет GCC 4.2 Предупреждения раздел, который включает в себя "Отсутствующие скобки и скобки".

  • После включения этой опции в iPhone Device SDK, переключение обратно к Similator показывает, что Настройка сборки "User-Defined" была добавлено:GCC_WARN_MISSING_PARENTHESES = "ДА".

  • Если назначение действительно необходимо в операторе if, вы можете удвоить скобки, чтобы избежать предупреждения.

(Пример двойных круглых скобок:)

if ((x = 5)) { ... }

Предупреждение работает как заклинание, хотя оно и не соответствует стандарту Apple:

if (self = [super init]) { ... }

Я, вероятно, оставлю их как есть, но если в проекте их будет очень много, я либо удвою скобки, либо вынесу задание в отдельную строку.

Спасибо!

Другие советы

Я думаю, вам нужен вариант -Wall.

int main(void) {

    int x = 5;
    if ( x=5) { 
    }
    return 0;
  }

$ g++ -pedantic x.cc 
$ g++ -Wall x.cc 
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value

Этот связь описывает, как включить параметры через графический интерфейс Xcode.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top