Why shouldn’t extern "C"
be specified for a function that needs to be defined as a C function? What effect would that have on the compiler when compiling the file as a C source?
If there is no effect on the C compiler, can’t we just define a function in a header file as below by removing the #ifdef __cplusplus
check?
extern "C" {
int MyFunc();
}
An answer to another question says that the #ifdef
is needed, but I don’t understand why:
Regarding #2: __cplusplus will be defined for any compilation unit that is being run through the C++ compiler. Generally, that means .cpp files and any files being included by that .cpp file. The same .h (or .hh or .hpp or what-have-you) could be interpreted as C or C++ at different times, if different compilation units include them. If you want the prototypes in the .h file to refer to C symbol names, then they must have
extern "C"
when being interpreted as C++, and they should not haveextern "C"
when being interpreted as C -- hence the#ifdef __cplusplus
checking.