Paréntesis que rodea los valores devueltos en C

7 minutos de lectura

avatar de usuario
Demasiado

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

Me gusta esto:-

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

¿Por qué usar () alrededor del valor de retorno en esos casos? ¿Algunas ideas? No puedo ver ninguna razón para eso.

  • Parece una llamada de función de esa manera ;-).

    -Toon Krijthe

    2 de octubre de 2008 a las 11:55

  • Pero return no es una llamada de función, a menos que seas Schemer. :-PAGS

    – Chris Jester-Young

    2 de octubre de 2008 a las 11:59

  • Tooony: ¡Quiero saber por qué la gente también pone corchetes innecesarios para sizeof!

    – Chris Jester-Young

    2 de octubre de 2008 a las 11:59

  • Si bien a menudo se ofrecen justificaciones ergonómicas post hoc para el hábito, vale la pena mirar los lenguajes modernos que tienen declaraciones de retorno y preguntarse si existe la misma convención. AFAIK la respuesta es un NO rotundo. La respuesta del usuario 10392 es interesante porque brinda un beneficio específico de C derivado del hábito.

    – AmigoNico

    19 de junio de 2013 a las 2:33


  • Posible duplicado de ¿Son significativos los paréntesis alrededor del resultado en una declaración de devolución?

    – phuclv

    17 mayo 2017 a las 12:41

avatar de usuario
adam haile

Realmente no hay una razón… es solo una vieja convención.

Para ahorrar espacio, los programadores a menudo hacen los cálculos 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 allí para que sea más fácil ver que se devuelve una declaración única, 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ó.

  • Tiendo a hacerlo cuando devuelvo matemáticas así. No sé, es como si tuviera miedo de que el método regrese antes de que se terminen las matemáticas evaluando o algo oO

    – Wes P.

    2 de octubre de 2008 a las 12:30

  • Me alegro de que no fuera solo yo pensando que es innecesario. 😉 Los paréntesis para establecer la prioridad de son comprensibles, pero en mi humilde opinión, una declaración de devolución como la anterior debe dividirse en varias declaraciones. Aumenta la legibilidad y son menos propensos a errores. ¡Atrévete a decir no a la notación de salchichas! 😉

    – Demasiado

    2 de octubre de 2008 a las 14:03

  • “los padres se aseguran de que estén principalmente allí para que sea más fácil ver que se devuelve una sola declaración”: ¿qué se supone que significa esto? aparte de la gramática, no puede devolver declaraciones y usa más espacio que sin paréntesis.

    – Recuerda a Mónica

    17/10/2014 a las 11:31

  • Lamento revivir una respuesta tan antigua, pero en realidad es una razón. En los primeros días de C, antes de que fuera estandarizado, la sintaxis requería los paréntesis. Referirse a cm.bell-labs.com/cm/cs/who/dmr/cman.ps.

    – Segmentado

    27 de marzo de 2015 a las 23:22

  • @MarcLehmann No tengo idea de lo que se supone que significa o cómo fue tan votado y aceptado. Agregar paréntesis simplemente me parece feo (incluso podría deshacerme de ellos por if et al, si yo fuera rey). Como para make it easier to see that it is a single statement that is returneden primer lugar, eso es un expresiónno una “declaración” – y qué – piensa la gente return es un operador codicioso y que return x+i*2 podría volver x y descartar el resto? Si es así, guau. ¿O esta respuesta realmente estaba pensando en expresiones largas que podrían abarcar varias líneas? De cualquier manera, se perdió totalmente su propio punto.

    – subrayado_d

    30 de julio de 2016 a las 23:36


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

  • ¡Guau! Puede que sea poco probable, pero este es el único motivo que he oído ofrecer para el hábito que no equivale a “oh, bueno, alguien probablemente pensó que podría verse mejor o ser más consistente”, ninguno de los cuales parecía ni remotamente convincente para mí. Gracias por este poco de cordura!!

    – AmigoNico

    19 de junio de 2013 a las 2:18


  • Observación interesante. En mi experimentación noté que una macro definida para regreso parece permitir argumentos macro sin paréntesis, pero una macro definida para otro nombre (digamos cuadrado) no. Creo que he mirado al abismo esta vez…

    – Alain O’Dea

    29 ago 2015 a las 15:20

  • … mejor espero que nadie llame a una función o use un operador de incremento o tenga otros efectos secundarios en sus declaraciones de retorno, entonces.

    –Carl Norum

    29 de septiembre de 2016 a las 18:18

  • Este es un argumento fuerte para no usar paréntesis para declaraciones de retorno.

    – ahora buey

    7 de diciembre de 2017 a las 10:54

  • @polynomial_donut: si tuviera una expresión en su declaración de devoluciones, podrían ocurrir problemas normales relacionados con macros, como la evaluación múltiple.

    –Carl Norum

    19/09/2018 a las 17:45

avatar de usuario
rebanada de raks

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

Debo agregar, para las personas que están pensando en C++: Esta la pregunta es sobre C y C no es C++; estos son dos lenguajes diferentes con diferentes estándares, capacidades, niveles de dificultad y diferentes estilos de uso que emergen; independientemente de lo que tengan en común, es prudente tratarlos como dos cosas totalmente separadas. Para una pregunta similar que cubre C++, consulte ¿Son significativos los paréntesis alrededor del resultado en una declaración de devolución?

  • En mi humilde opinión, esta es la única respuesta razonable/convincente (ya que explica de dónde puede originarse un hábito extraño). Vine aquí desde SO: ¿Son significativos los paréntesis alrededor del resultado en una declaración de devolución? simplemente habiendo aprendido otra diferencia significativa entre C y C++…

    – El gato de Scheff

    24 de abril de 2019 a las 10:11

Mi estilo personal es usar paréntesis si hay una expresión compleja; p.ej,

return (a + b);

pero no usarlos si la expresión es un término simple

return a;

No puedo decir por qué lo hago de esa manera; Sólo algo que recogí hace mucho tiempo.

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

return(a);  // ugh

es increíblemente feo y simplemente incorrecto.

Hay unas pocas razones:

  1. si/mientras/para/etc. son todas 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 otra palabra clave que puede tenerlos o no, excepto que en algunos casos deber usa parientes. Así que es más fácil adquirir el hábito de usar siempre paréntesis. para sizeof, lo que implica una lógica de: si puedes, hazlo siempre.

  3. case/goto son las únicas palabras clave en las que nunca se usan paréntesis. … y la gente tiende a pensar en ellos como casos especiales (y les gusta que se destaquen de otras palabras clave de control, especialmente goto).

avatar de usuario
Stein G. Strindhaug

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

return 1

o

return -1

o

return (-1)

avatar de usuario
James Jones

Tal vez sea una costumbre; después de todo, la gente que nos trajo Unix y C provenía del proyecto Multics. Multics fue escrito en PL/I, y en PL/I los paréntesis son obligatorios.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad