Вызов функции является выражением независимо от типа возвращаемого значения функции.Грамматика Си ортогональна его системе типов.Они являются независимыми частями языка.Грамматически func();
является оператором выражения .
expression_statement
: ';'
| expression ';'
;
postfix_expression
: primary_expression
| postfix_expression '[' expression ']'
| postfix_expression '(' ')'
| postfix_expression '(' argument_expression_list ')'
Есть очень мало вещей, которые вы можете сделать с результатом void
.Вы не можете присвоить его переменной, поскольку void
переменные не допускаются.Если результат func()
равен void
, вы можете использовать четыре оператора:
- Скобки:
(func())
- Последовательность запятых:
func(), 42
- Ternaryоператор:
42 ? func() : func()
. - Приведение к пустоте:
(void) func()
Вы также можете вернуть void
результат:
return func();
Наконец, вfor(init; condition; increment)
цикл, все три части являются выражениями. init и приращение (но не условие ) может быть void
.
for (func(); 42; func()) { }
Немногие из них полезны, но ни один из них не годитсястиль, но все они законны.