Как заставить компилятор Xcode 3.1 предупреждать об операторе присваивания в операторе if?
-
05-07-2019 - |
Вопрос
Я пытался найти документацию и Интернет, насколько это было возможно, но мне не удалось заставить компилятор 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.