Return void type in C und C ++

Dies wird ohne Warnung kompiliert.

Ist das legal in C und C ++ oder funktioniert es nur in gcc und clang?

Wenn es legal ist, ist es etwas Neues nach C99?

void f(){

}

void f2(){
    return f();
}

Aktualisiere

as "Rad Lexus" schlug vor, dass ich dies versuchte:

$ 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)

Aktualisiere

Jemand fragte, wie diese Konstruktion hilft. Gut ist mehr oder weniger syntaktischer Zucker. Hier ist ein gutes Beispiel:

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");
}

Antworten auf die Frage(10)

Ihre Antwort auf die Frage