usar tipos retorno programas parametros lenguaje funciones formales ejemplos con como c syntax coding-style

c - tipos - Paréntesis que rodea los valores de retorno



programas en c con funciones (12)

Hay unas pocas razones:

  1. if / while / for / etc. son todas palabras clave de control que deben tener parens. Por lo tanto, a menudo parece natural que siempre los devuelvan también.

  2. sizeof es la única palabra clave que puede tenerlos o no, excepto que en algunos casos debe usar parens. Entonces es más fácil adoptar el hábito de usar siempre parens. para sizeof, lo que implica una lógica de: si puedes, siempre lo haces.

  3. case / goto son las únicas palabras clave donde nunca usas parens. ... y la gente tiende a pensar en ellos como casos especiales (y les gusta a ambos destacar de otras palabras clave de control, especialmente goto).

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é use () alrededor del valor de retorno en esos casos? ¿Algunas ideas? No puedo ver ninguna razón para eso.


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


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; algo que recogí hace mucho tiempo.

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

return(a); // ugh

es increíblemente feo y simplemente está mal.


Quizás esto se deba a que, con paréntesis, se parece más a una llamada a función, es decir, se parece más al resto del código.

O simplemente es algo que todos hacen, solo porque todos los demás lo hacen :-)


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


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)


El uso de paréntesis en una declaración de retorno 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.


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

Para ahorrar espacio, los programadores suelen hacer los cálculos finales en la línea de retorno en lugar de hacerlo en su propia línea y los parientes se aseguran de que están en su mayoría allí para que sea más fácil ver que se devuelve una sola declaración, 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 estancó.


Tal vez es una costumbre, después de todo, la gente que nos trajo Unix y C vino del proyecto Multics. Multics se escribió en PL / I, y en PL / I los paréntesis son obligatorios.


Como suele ser el caso cuando uso paréntesis, creo que es solo para legibilidad (por ej., Ruby admite llamadas a métodos sin paréntesis que encierran los argumentos, pero los libros y artículos recientes aconsejan lo contrario).


Los paréntesis en una declaración de retorno indican al compilador que tiene la intención de que se devuelva este valor en la pila en lugar de en la memoria.

En los viejos tiempos esto se aplicaba rigurosamente (normalmente), 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 corromper todo lo que se devuelve a través de una referencia de memoria, pero normalmente no afectará a una variable que se devuelve en la pila.

El uso de la pila para variables transitorias también reduce el uso de la memoria y generalmente hace que la función llame / regrese más rápido porque para eso está diseñada la pila, datos / variables transitorias.


En la especificación C original, se requerían paréntesis alrededor del valor de retorno. Si bien los compiladores modernos de C y el estándar ANSI C no los requieren, la presencia de paréntesis no afecta el valor de retorno, y los programadores algunas veces todavía los incluyen por costumbre, 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.