Синтаксис: один оператор в объявлении функции - PullRequest
9 голосов
/ 07 июля 2011

В языке программирования C можно опустить блок кода в случае одного оператора, например:

if(1) exit();

Теперь, это относится только к условным выражениям? Почему это не действует в случае функций:

void f(int a) exit();

Ответы [ 3 ]

19 голосов
/ 07 июля 2011

Это особенность синтаксиса Си. В BNF определение функции выглядит как

FUNC_DEF ::= TYPE IDENTIFIER "(" PARAM_LIST ")" BLOCK

при утверждении

STATEMENT ::= (EXPRESSION | DECLARATION | CONTROL | ) ";" | BLOCK
BLOCK ::= "{" STATEMENT* "}"

(упрощено, чтобы разрешить смешанные объявления и операторы, что C ++ допускает, но C не позволяет), а оператор if равен

CONDITIONAL ::= "if" "(" EXPRESSION ")" STATEMENT

пропуская часть else на данный момент.

Причина в том, что в противном случае вы могли бы написать функцию

void no_op() {}

1021 * а *

void no_op();

но последний синтаксис уже используется для обозначения объявления.

4 голосов
/ 07 июля 2011
  • Синтаксис условного оператора таков:

    if(expression) statement
    
  • Составной оператор является оператором.

  • A compound statement определяется как

    { zero or more statements }
    
  • Синтаксис определения функции такой:

     function_declaration compound_statement
    
  • Итак, по определению тело функции должно быть составным оператором и иметь {}

  • КЭД :)

1 голос
/ 07 июля 2011

Существует очень старый диалект C, K & R C. На этом диалекте объявление функции может выглядеть так:

fun_a(a,b)
char a;
float b;
{
        fun_b(b,a);
}

Я думаю, было бы слишком сложно разобрать его без { и }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...