Perché non è necessario specificare extern "C"
per una funzione che deve essere definita come una funzione C? Quale effetto avrebbe sul compilatore durante la compilazione del file come sorgente C?Possiamo usare "C" extern nel file C senza #ifdef __cplusplus?
Se non c'è alcun effetto sul compilatore C, non possiamo semplicemente definire una funzione in un file di intestazione come di seguito rimuovendo il controllo #ifdef __cplusplus
?
extern "C" {
int MyFunc();
}
An answer to another question dice che il #ifdef
è necessario, ma non capisco il motivo per cui:
Per quanto riguarda # 2: sarà definito __cplusplus per qualsiasi unità di compilazione che viene eseguito attraverso il C++ compiler. In genere, ciò significa file .cpp e qualsiasi file incluso da quel file .cpp. Lo stesso file .h (o .hh o .hpp o what-have-you) potrebbe essere interpretato come C o C++ in momenti diversi, se diverse unità di compilazione li includono. Se si desidera che i prototipi nel file .h facciano riferimento ai nomi dei simboli C, devono avere
extern "C"
quando vengono interpretati come C++ e non dovrebbero avereextern "C"
quando vengono interpretati come C - da cui il controllo#ifdef __cplusplus
.
Grazie. Non sapevo che fosse un costrutto C++. – Alexander