Here is an example that takes advantage of the difference between function calls and object declarations in C and C++, as well as the fact that C90 allows the calling of undeclared functions:
#include <stdio.h>
struct f { int x; };
int main() {
f();
}
int f() {
return printf("hello");
}
In C++ this will print nothing because a temporary f
is created and destroyed, but in C90 it will print hello
because functions can be called without having been declared.
In case you were wondering about the name f
being used twice, the C and C++ standards explicitly allow this, and to make an object you have to say struct f
to disambiguate if you want the structure, or leave off struct
if you want the function.