C11, 6.8.6.4 “The return
statement”:
A
return
statement with an expression shall not appear in a function whose return type isvoid
.
No, you may not use an expression, even if it is of void
type.
From the foreword of the same document:
Major changes in the second edition included:
[…]
return
without expression not permitted in function that returns a value (and vice versa)
So this was a change from C89 -> C99 (the second edition of the language standard), and has been that way ever since.
C++14, 6.6.3 “The return
statement”:
A return statement with an expression of non-void type can be used only in functions returning a value […]
A return statement with an expression of type void can be used only in functions with a return type of cv
void; the expression is evaluated just before the function returns to its caller.
Yes, you may use an expression if it is of void type (that’s been valid since C++98).