c style Скобки, окружающие возвращаемые значения




linux coding style (10)

Довольно часто в коде ANSI C я вижу круглую скобку, окружающую одно возвращаемое значение.

Как это:-

int foo(int x) {
  if (x)
    return (-1);
  else
    return (0);
}

Зачем использовать () вокруг возвращаемого значения в этих случаях? Есть идеи? Я не вижу причин для этого.


Я работал, по крайней мере, с одним программистом, который думал, что возвращение было каким-то особым вызовом функций, и был удивлен, когда увидел, что мой код выполнил без парнеров.


Это действительно не причина ... это просто старая конвенция.

Чтобы сэкономить место, программисты часто делали окончательную математику в обратной линии, а не на своей собственной линии, и, как правило, функции parens гарантируют, что это будет проще видеть, что это единственный оператор, который возвращается:

return (x+i*2);

вместо

int y = x+i*2;
return y;

Скобка стала привычкой, и она застряла.


Практический, но маловероятный, мотив заключается в том, что если вы помещаете скобки вокруг значения, вы можете определить return как макрос, а затем вставить некоторый код регистрации, чтобы просмотреть все ваши возвращения.


Есть несколько причин:

  1. если /, а / к / и т.д.. все контрольные ключевые слова, которые должны иметь parens. Поэтому часто кажется естественным всегда возвращать их тоже.

  2. sizeof - единственное другое ключевое слово, которое может иметь их или нет, за исключением того, что в некоторых случаях вы должны использовать parens. Так что легче привыкнуть всегда использовать парсеры. для sizeof, что подразумевает логику: если можно, всегда делайте.

  3. case / goto - это единственные ключевые слова, в которых вы никогда не используете parens. ... и люди склонны думать о них как о специальных случаях (и как они оба выделяются из других контрольных ключевых слов, особенно).


Возможно, это связано с тем, что в скобках он больше похож на вызов функции, то есть больше похож на остальную часть кода?

Или это просто то, что все делают, только потому, что все это делают :-)


Мой личный стиль - использовать круглые скобки, если существует сложное выражение; например,

return (a + b);

но не использовать их, если выражение является простым термином

return a;

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

Кстати, я думаю, что это похоже на вызов функции, например:

return(a);  // ugh

невероятно уродлив и просто ошибается.


Использование круглых скобок в операторе return показывает недостаточное понимание синтаксиса C/C++ . Это так просто. Но это не так плохо, как положить все в фигурные скобки:

int foo(int x) {
  if (x) {
    return (-1);
  }
  else {
    return (0);
  }
}

Так много программистов это делают. Если кто-то из вас читает это, возможно, вам захочется объяснить.


Parenthesis в возвращаемом выражении указывает компилятору, что вы намерены вернуть это значение в стек, а не в память.

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

Это то, что я часто делаю, поскольку ошибка может испортить что-либо, возвращаемое с помощью ссылки на память, но обычно не влияет на возвращаемую переменную в стеке.

Использование стека для переходных переменных также сокращает использование памяти и обычно делает функцию call / return быстрее, потому что это то, для чего предназначен стек, временные данные / переменные.


В исходной спецификации C для возвращаемого значения требуются скобки. В то время как современные компиляторы C и стандарт ANSI C их не требуют, наличие скобок не влияет на возвращаемое значение, а программисты иногда по-прежнему включают их по привычке, незнанию со стандартами, для соответствия стилистическому соглашению, которое их требует, или, возможно, для обратной совместимости.


Возможно, это обычай - в конце концов, люди, которые принесли нам Unix и C, пришли из проекта Multics. Мультики были написаны в PL / I, а в PL / I скобки являются обязательными.





coding-style