I thought it would be interesting to discuss a subtle C/C++ interview question I learned recently. Question is deceptively simple: "Can you write a return statement in a function that returns void?" The answer is "Yes! You can return void!" The following program seems to be a valid C/C++ program.
static void foo (void) { }
static void bar (void) {
return foo(); // Note this return statement.
}
int main (void) {
bar();
return 0;
}
I tested it using gcc4 and VS9. With -ansi and -pedantic compiler options for gcc, it throws just a warning pointing at line #5.
return_void.c:5: warning: return with a value, in function returning void
Although use of such a feature is not clear in a C program, it is particularly useful while using templates. Consider,
template <class T>
T FOO (void) {
return T(); // Default construction
}
template <class T>
T BAR (void) {
return FOO<T>(); // Syntactic consistency. Same for int, void and everything else.
}
int main (void) {
BAR<void>();
}
It suddenly makes sense when templates are in picture. Take home point: Syntactic consistency is of paramount importance for supporting generic programming and writing generic libraries.
Home
»
»Unlabelled
» return void
return void
09:52
0 comments:
Post a Comment