2010-08-16 7 views

Répondre

2

Il s'agit d'un détail de mise en œuvre robuste. Mais la plupart des compilateurs C++ que je connais n'essaient pas de faire quelque chose de spécial pour différencier une fonction C d'une fonction C++ non-instance. Juste la convention d'appel cdecl olden plaine pour les deux. Un peu important parce que l'implémentation CRT, avec des fonctions comme printf(), est aussi utilisable par un compilateur C que par le compilateur C++ du même fournisseur. Personne ne veut en conserver deux versions.

+0

À titre de référence, comment «extern» C «' factorise-t-il? – cHao

+1

@cHao il arrête le nom mangling que C++ fait pour supporter la surcharge de l'opérateur, par exemple. 'foo (int)' et 'foo (double)' pourraient traduire en 'foo_int' et' foo_double' dans l'assembly émis par le compilateur, mais 'extern 'C" foo (int) 'et' extern "C" foo (double) 'les deux traduisent simplement en' foo' –

+0

Il change le nom de l'identifiant vu par l'éditeur de liens. Désactive le mangling du nom C++. Toutes les fonctions CRT traditionnelles sont extern "C" dans leur déclaration vue par le compilateur C++. –

3

Le compilateur C++ «fait le bon choix» et utilise la convention d'appel correcte pour la fonction C - une réponse qui sonne boiteuse mais je ne sais pas si on peut en dire beaucoup plus!