L'utilisation de pointeurs de fonction membre statiques comme rappels de l'API C dans C soulève des inquiétudes concernant la sécurité et la portabilité . Bien qu'une telle pratique puisse sembler fonctionner au départ, étant donné que les fonctions statiques de classe adoptent fréquemment la même convention d'appel que les fonctions C, elle est considérée comme dangereuse et déconseillée selon la norme C.
Selon la norme (3,5/10 ), "les types spécifiés par toutes les déclarations faisant référence à un objet ou une fonction donnée doivent être identiques." Cependant, si une fonction membre statique est utilisée comme cible de rappel, le code de rappel utilisant les liaisons en langage C nécessitera une fonction avec une liaison de langage différente. Comme défini dans la norme (7.5/1), "Deux types de fonctions avec des liens de langage différents sont des types distincts même s'ils sont par ailleurs identiques."
Par conséquent, la fonction membre statique et le rappel API doivent partager le même lien linguistique. Pour garantir la sécurité et la portabilité, il est fortement recommandé de déclarer les rappels C ABI comme "extern "C"" dans le code C.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!