Paréntesis que rodean los valores de retorno


Muy a menudo en el código ANSI C puedo ver paréntesis alrededor de un solo valor de retorno.

Así: -

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

¿Por qué usar () alrededor del valor devuelto en esos casos? Alguna idea? No veo razón para eso.

Author: prakash, 2008-10-02

12 answers

Realmente no hay un reason...it es una vieja convención.

Para ahorrar espacio, los programadores a menudo hacen las matemáticas finales en la línea de retorno en lugar de en su propia línea y los paréntesis se aseguran de que estén principalmente allí para que sea más fácil ver que es una sola instrucción que se devuelve, como esta:

return (x+i*2);

En lugar de

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

El paréntesis se convirtió en un hábito y se quedó.

 55
Author: Adam Haile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-21 19:46:50

Un motivo práctico, pero poco probable, es que si coloca paréntesis alrededor del valor, puede definir retorno como una macro y luego insertar algún código de registro para ver todos sus retornos.

 47
Author: user10392,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 19:26:01

Mi estilo personal es usar paréntesis si hay una expresión compleja; por ejemplo,

return (a + b);

Pero no usarlas si la expresión es un término simple

return a;

No puedo decir por qué lo hago de esa manera; solo algo que aprendí hace mucho tiempo.

Por cierto, creo que hacer que parezca una llamada a una función, así:

return(a);  // ugh

Es increíblemente feo y simplemente incorrecto.

 21
Author: Kristopher Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 12:24:06

Hay algunas razones:

  1. If / while / for / etc. son todas las palabras clave de control que deben tener paréntesis. Por lo tanto, a menudo parece natural ponerlos siempre a la vuelta también.

  2. Sizeof es la única palabra clave que puede tenerlos o no, excepto que en algunos casos debe usar paréntesis. Por lo tanto, es más fácil adquirir el hábito de usar siempre parens. para sizeof, lo que implica una lógica de: si se puede, siempre hacer.

  3. Case / goto son los únicos palabras clave donde nunca usas paréntesis. ... y la gente tiende a pensar en ellos como casos especiales (y como ambos para destacar de otras palabras clave de control, esp. goto).

 13
Author: James Antill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 14:35:21

Al devolver -1 como en su ejemplo, creo que es más legible con el paréntesis porque el menos es más visible:

return 1

O

return -1

O

return (-1)
 8
Author: Stein G. Strindhaug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-08 13:31:22

En la especificación C original, se requerían paréntesis alrededor del valor devuelto. Mientras que los compiladores C modernos y el estándar ANSI C no los requieren, la presencia de paréntesis no afecta el valor de retorno, y los programadores a veces todavía los incluyen por costumbre, desconocimiento de los estándares, por coherencia con una convención estilística que los requiere, o posiblemente por compatibilidad con versiones anteriores.

 6
Author: rakslice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-21 20:32:30

Quizás es costumbre after después de todo, la gente que nos trajo Unix y C vino del proyecto Multics. Multics fue escrito en PL / I, y en PL / I los paréntesis son obligatorios.

 3
Author: James Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-25 16:29:01

He trabajado con al menos un programador que pensó que return era algún tipo especial de llamada a la función, y se sorprendió cuando vio que mi código cumplía sin los paréntesis.

 2
Author: AShelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 20:26:53

Como a menudo ocurre cuando se usan paréntesis, creo que es solo para facilitar la lectura (por ejemplo, Ruby admite llamadas a métodos sin paréntesis que incluyan los argumentos, pero los libros y artículos recientes aconsejan lo contrario).

 2
Author: Manrico Corazzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 23:36:46

Tal vez esto se debe a que con paréntesis se parece más a una llamada a una función, es decir, se parece más al resto del código?

O es algo que todo el mundo hace, solo porque todo el mundo lo hace: -)

 0
Author: Sec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-02 12:04:07

El paréntesis en una instrucción return indica al compilador que desea que este valor se devuelva en la pila en lugar de en la memoria.

En los viejos tiempos esto se aplicaba rigurosamente(típicamente), pero hoy en día la mayoría de los compiladores solo lo toman como una pista.

Esto es algo que hago con frecuencia, ya que un error podría dañar cualquier cosa que se devuelve a través de una referencia de memoria, pero normalmente no afectará a una variable que se devuelve en la pila.

Usando la pila para transitorios las variables también reducen el uso de memoria y normalmente hacen que la función llame/regrese más rápido porque para eso está diseñada la pila, datos/variables transitorios.

 -4
Author: Diogenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-26 06:33:42

El uso de paréntesis en una instrucción return muestra una comprensión deficiente de la sintaxis C/C++. Es tan simple como eso. Pero no es tan malo como poner todo en llaves:

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

Muchos programadores hacen esto. Si uno de ustedes lee esto, tal vez le gustaría explicar.

 -6
Author: TonyK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-21 19:09:49