¿Por qué no se debe especificar extern "C"
para una función que debe definirse como una función C? ¿Qué efecto tendría eso en el compilador al compilar el archivo como fuente C?¿Podríamos usar extern "C" en el archivo C sin #ifdef __cplusplus?
Si no hay ningún efecto en el compilador de C, ¿no podemos simplemente definir una función en un archivo de encabezado como el siguiente al eliminar la comprobación #ifdef __cplusplus
?
extern "C" {
int MyFunc();
}
An answer to another question dice que se necesita la #ifdef
, pero no entiendo por qué:
Respecto # 2: __cplusplus se definirá para cualquier unidad de compilación que está siendo ejecutado a través del compilador de C++. En general, eso significa archivos .cpp y cualquier archivo incluido por ese archivo .cpp. El mismo .h (o .hh o .hpp o lo que-tiene-usted) podría interpretarse como C o C++ en diferentes momentos, si las incluyen diferentes unidades de compilación. Si desea que los prototipos en el archivo .h se refieran a los nombres de símbolos C, entonces deben tener
extern "C"
cuando se interpretan como C++, y no deben tenerextern "C"
cuando se interpretan como C - de ahí la comprobación#ifdef __cplusplus
.
Gracias. No sabía que era una construcción C++. – Alexander