Скобки вокруг возвращаемых значений - почему?

Довольно часто я вижу такой код (C, С++ и иногда Java):

return (value);

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

Я понимаю, что аналогичный вопрос уже задан здесь, но это связано только с ANSI C. Интересно, существуют ли аспекты, специфичные для С++ или Java, на которые там не было ответа.

Ответ 1

Относительно C

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

return x + y;

Программисты делают это return (x + y);, чтобы сделать его более читаемым.

Итак, размещение круглых скобок - это вопрос мнения и практики.


Что касается С++

Существует тайный случай, когда речь идет о круглых скобках. Цитирование этого вопроса

int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))

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


В отношении java круглые скобки не имеют никакого значения.

Соглашение о кодировании предлагает пойти с

return x + y;

чтобы узнать больше, прочитайте этот ответ.


ПРИМЕЧАНИЕ: Я мало знаю о Java и С++. Все содержание в моем ответе о java и С++ взято из других ответов. Я сделал это, чтобы объединить различные соглашения для трех языков.

Ответ 2

Технически нет никаких оснований заключать в скобки выражение, данное return. Это действительно вопрос вкуса.

Тем не менее, я обычно заключу в скобки выражение return, если оно использует логические операторы. Поскольку такие операторы обычно рассматриваются как часть while или if, это делает более понятным, что вы хотите что-то сделать с этим значением, помимо того, что, по-моему, прыгаете.

int out_of_range(int x)
{
    return ((x < 1) || (x > 10));
}

Ответ 3

В основном наследие. Язык программирования K & R C (1978) показывает результаты с использованием скобок. Возможно, некоторые старые компиляторы C потребовали этого, но я не уверен.

Ответ 4

Прежде всего, это не обязательно, и вы увидите его важность в возвращении выражений & не ценности. Но если вы не используете скобки, ваш код может быть не так легко читаемым (особенно в случае сложных выражений) и может привести к путанице. Также можно отметить, что ЭТО НЕ ФУНКЦИЯ (поскольку скобки не являются обязательными). Вы можете отметить случай return 0; в конце тела main(). Здесь заметно, что скобки с 0 не используются, что доказывает, что это не функция. Таким образом, скобки используются для того, чтобы сделать код более читаемым и понятным для компилятора.