Вопрос: Защищает ли выполнение if(SomeFunction() == TRUE)
вместо if(SomeFunction())
от какого-либо типа ошибки кодирования? Я пытаюсь понять, защищает ли это какую-то скрытую мину или это результат того, что кто-то пишет код, который не совсем понимает, как оцениваются выражения. Я понимаю, что если все сделано правильно, обе эти вещи оценивают одинаково. Точно так же, как if(value == 42)
и if(42 == value)
оценивают одинаково - все же, некоторые предпочитают 2-ую версию, потому что она выдает ошибку компилятора, если кто-то опечатывает вместо == и пишет =.
Предыстория: Я унаследовал некоторые встроенные программы, которые были написаны 4 или 5 лет назад людьми, которые здесь больше не работают. Я нахожусь в процессе рефакторинга, чтобы избавиться от многотысячных строковых функций и глобальных переменных и всего этого джаза, так что эта вещь читаема, и мы можем поддерживать ее в будущем. Код написан для микропроцессора Pic. Это может или не может иметь отношение. В коде есть всякие странные вещи, которые кричат «не знал, что они делают», но здесь есть определенный паттерн (анти-паттерн?), Который я пытаюсь понять, есть ли веская причина для
Шаблон: Здесь много операторов if, принимающих форму
if(SomeFunction() == TRUE){
. . .
}
Где SomeFunction () определяется как
BOOLEAN SomeFunction(void){
. . .
if(value == 3)
return(FALSE);
else
return(TRUE);
}
Давайте проигнорируем странный способ, которым SomeFunction возвращает TRUE или FALSE из тела оператора if, и странный способ, которым они заставили 'return' выглядеть как вызов функции.
Кажется, что это нарушает нормальные значения, которые c считает «истинными» и «ложными». Например, они действительно хотят убедиться, что возвращаемое значение равно тому, что определено как ИСТИНА. Как будто они делают три состояния - ИСТИНА, ЛОЖЬ и «что-то еще». И они не хотят, чтобы оператор «если» принимался, если возвращалось «что-то еще».
1117 Моё внутреннее чувство, что это странный анти-паттерн, но я хочу дать этим парням преимущество сомнения. Например, я понимаю, чтоif(31 == variable)
выглядит немного странно, но написано именно так, поэтому, если вы опечатаете ==, вы случайно не назначите 31 переменной. Парни, которые написали это, защищали от подобной проблемы, или это просто глупость.
Дополнительная информация
typedef enum _BOOLEAN { FALSE = 0, TRUE } BOOLEAN;