Любая причина для if (function () == TRUE) в C

Вопрос: Защищает ли выполнение 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 переменной. Парни, которые написали это, защищали от подобной проблемы, или это просто глупость.

Дополнительная информация

  • Когда я писал этот вопрос, у меня сложилось впечатление, что stdbool не был доступен, но теперь я вижу, что он предоставляется в среде IDE, просто нет используется в этом проекте. Это больше склоняет меня к «Нет веских оснований для этого».
  • Похоже, что BOOLEAN определяется как typedef enum _BOOLEAN { FALSE = 0, TRUE } BOOLEAN;
  • . Средой разработки здесь является MPLAB 8.6
. ]
9
задан Pete Baughman 6 April 2016 в 21:20
поделиться