j'ai trouvé ce code dans un .h , mais je comprend pas l'explication :
ca veu dire quoi le extern "c" ???Code:
1
2
3
4
5
6 #ifndef _VER #define LRLIB_C_API extern "C" #else #define LRLIB_C_API #endif
merci pour votre aide
Version imprimable
j'ai trouvé ce code dans un .h , mais je comprend pas l'explication :
ca veu dire quoi le extern "c" ???Code:
1
2
3
4
5
6 #ifndef _VER #define LRLIB_C_API extern "C" #else #define LRLIB_C_API #endif
merci pour votre aide
C'est pas du C.Citation:
Envoyé par coax81
c'est du C++ sinon?!
Du C++ qui permet de déclarer des entités C.
excusez moi mais j'ai trop compris ?
c'est une macro ? qui es ecrite en c ?
Salut,
En fait il y a deux partie dans ce code...
La partie préprocesseur qui aura pour résultat que, selon que _VER est défini, ou non, LRLIB_C_API aura une valeur plutôt qu'une autre:
- extern "C" si _VER n'est pas connu par le préprocesseur
- rien s'il l'est
D'un autre coté, il y a le fameur extern "C" lui-même.
Il s'agit, tout simplement d'une instruction qui précise, en grosTypiquement, le résultat est donc que, si on utilise un compilateur C, _VER est connu par le préprocesseur, et il n'y a aucun problème.Citation:
attention, ce qui suit est à compiler comme si c'était du C, et non du C++
Par contre, si on utilise un compilateur C++, _VER n'est pas connu par le préprocesseur, et il faut alors préciser que ce qui suit est à compiler avec le compilateur C, et c'est ce qui est fait :D
et ça sert à ce que même quand ta source est compilée avec un compilateur C++ ça génère des fonctions qui ont une signature de fonction C.
C'est pas ça du tout.Citation:
Il s'agit, tout simplement d'une instruction qui précise, en gros
Citation:
attention, ce qui suit est à compiler comme si c'était du C, et non du C++
Ça sert juste à dire que la fonction déclarée comme extern "C" doit avoir un linkage compatible avec le C, c'est-à-dire qu'elle doit utiliser l'ABI du C, sans name-mangling.
Donc la fonction ne peut pas être un template ni être surchargée, ni être une fonction membre.
ouais c'est ce que je disais :P mais j'avais pas relevé l'erreur du post précédent