standard - linux coding style




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

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

Как это:-

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

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


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

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


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

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

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

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


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


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


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

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

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


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

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

return (x+i*2);

вместо

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

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


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


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

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

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

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





coding-style