Es una característica de la sintaxis C. En BNF, una definición de función es algo así como
FUNC_DEF ::= TYPE IDENTIFIER "(" PARAM_LIST ")" BLOCK
mientras que una declaración es
STATEMENT ::= (EXPRESSION | DECLARATION | CONTROL |) ";" | BLOCK
BLOCK ::= "{" STATEMENT* "}"
(simplificando para permitir declaraciones y declaraciones entremezcladas, que C++ permite pero C no lo hace), y un estado de if
es
CONDITIONAL ::= "if" "(" EXPRESSION ")" STATEMENT
omitiendo la pieza else
por el momento.
La razón de esto es que de lo contrario, se podría escribir la función
void no_op() {}
como
void no_op();
pero este último sintaxis ya está en uso para denotar una declaración.
Porque el estándar lo dice? –
nunca lo intenté, pero supongo que, si no está permitido, es solo una cuestión de sintaxis, tal vez legado: una vez que haya escrito nulo f (a) int a; {...}, entonces {} fueron necesarios para marcar el final del bloque de declaración de tipo de argumento ... tal vez ... – ShinTakezou
gracias, sabía de la antigua sintaxis de la función, pero esto también significa que los compiladores pueden analizar correctamente este entonces ... – overscore