zied3 a écrit :
Mais si je fais un "ifdef _cplusplus " ça ne m a servir a rien puisque la déclaration de la fonction est dans une bibliothèque en C. Donc il va pas y entrer.
|
La manip avec le ifdef __cplusplus permet d'utiliser une bibliothèque écrite en C avec un programme écrit en C++. En effet, dans un source compilé en C++, le fichier d'en-tête de la bibliothèque C va être inclus dans le source C++ et être compilé comme du C++. (à ce propos, dans les entêtes supportant C ou C++, il ne faut pas utiliser les mots C++ tels que this, new, delete, class etc.).
La macro interne __cplusplus est donc définie, et les déclarations se trouvent donc encadrées de
extern "C"
{
/* declarations 'C' */
}
|
Le but étant d'empécher le compilateur C++ de "décorer" les noms de fonctions (genre myfonc_@@01() au lieu de myfonc() ) de façon à ce que le linker (qui ne connait que 'myfonc') ne soit pas perdu.
Si on compile en C, l'effet de extern "C" est nul (non compilé). De toutes façons, extern "C" n'est pas une syntaxe C. Elle génèrerait donc une erreur à la compilation.
---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/