¿Por qué la statement de funciones es obligatoria en C ++ y no en C?

Entonces, ¿uno de mis exámenes anteriores tenía esta pregunta, y hasta ahora he estado leyendo que no necesita una statement en ninguno de los idiomas?

¿Lo cual está bien? ¿C ++ dará un error si no hay una statement, o se ejecutará?

En una discusión que involucra tanto a C como a C ++, la “statement de función” es un término bastante vago. Estos idiomas son significativamente diferentes en este sentido.

En el lenguaje C ++ solo hay un tipo de statement de función: statement con todos los tipos de parámetros y tipo de retorno. Dichas declaraciones son necesarias porque el lenguaje C ++ admite la sobrecarga de funciones. Para elegir a qué función llamar, el comstackdor necesita saber todo sobre la función y saber qué versiones sobrecargadas de la función están disponibles. Si “olvida” declarar alguna versión sobrecargada, no se considerará por resolución de sobrecarga. Esa es al menos una de las razones por las cuales las declaraciones de funciones son necesarias en C ++.

En lenguaje C hay dos tipos de declaraciones de funciones: declaraciones no prototipo y declaraciones prototipo (o simplemente prototipos ). Un prototipo en C es bastante similar a la statement de C ++: incluye todos los tipos de parámetros. Los prototipos siempre han sido requeridos en el estándar C para funciones variables (funciones con ... parámetros). Para las funciones no variadas, las declaraciones de prototipos no se requieren incluso hoy en día. Pero a partir de C99 se requieren al menos declaraciones no prototipo para todas las demás funciones. En la versión anterior C89 / 90 de las funciones de lenguaje, las declaraciones para funciones no variadas no eran necesarias.

Entonces, eso debería responder básicamente a tu pregunta. En C ++ se requieren declaraciones de funciones porque las características del lenguaje se basan en ellas de manera crítica. En la versión C moderna, también se requieren declaraciones para hacer que el código sea más seguro. En versiones anteriores de la función C, las declaraciones no se requerían principalmente porque el lenguaje estaba definido para funcionar sin ellas.

Las declaraciones de funciones en C no son obligatorias por razones de compatibilidad con versiones anteriores / anteriores: si se hicieran obligatorias, entonces algún código antiguo / antiguo en algún lugar dejaría de comstackrse.

Supongo que son obligatorios en C ++ porque C ++ no es un superconjunto estricto de C, por lo que puede hacer la elección sensata de hacerlos obligatorios.

Sin embargo, siempre debe declararlos. Consulte esta pregunta ¿Debe declarar el prototipo de función en C?

FYI en C99 declaraciones de función ahora son obligatorias.

Las declaraciones de funciones son obligatorias en C. Los prototipos, sin embargo, son opcionales, excepto en los casos de funciones variadas y funciones cuyos tipos de argumentos serían alterados por promociones predeterminadas.

No puedo responder por C.

En C ++, para funciones:

  • void foo(); es una declaracion
  • void foo() { .. } es una definición y una statement.

Necesita al menos una statement en el scope antes de llamar a foo() .

Lo mismo es cierto para las variables de datos.