在C和C++中,这是合法的吗?还是只在gcc和clang中有效?
如果合法的话,是C99之后的新特性吗?
void f(){}
void f2(){
return f();
}
更新
正如“Rad Lexus”建议的那样,我尝试了这个:
$ gcc -Wall -Wpedantic -c x.c
x.c: In function ‘f2’:
x.c:7:9: warning: ISO C forbids ‘return’ with expression, in function returning void [-Wpedantic]
return f();
$ clang -Wall -Wpedantic -c x.c
x.c:7:2: warning: void function 'f2' should not return void expression [-Wpedantic]
return f();
^ ~~~~~
1 warning generated.
$ gcc -Wall -Wpedantic -c x.cc
(no errors)
$ clang -Wall -Wpedantic -c x.cc
(no errors)
更新
有人问这个结构如何帮助。嗯,它更多或多少是一种语法糖。这里有一个很好的例子:
void error_report(const char *s){
printf("Error %s\n", s);
exit(0);
}
void process(){
if (step1() == 0)
return error_report("Step 1");
switch(step2()){
case 0: return error_report("Step 2 - No Memory");
case 1: return error_report("Step 2 - Internal Error");
}
printf("Processing Done!\n");
}
void
的使用上,C和C ++有很大的不同)。 - Bathshebagcc -Wall -Wpedantic -std=c99
和-std=c11
编译时,会收到警告:"warning: ISO C forbids 'return' with expression, in function returning void [-Wpedantic]"。 - Jongware