Pointeurs de fonction membre statiques comme rappels d'API C : une entreprise risquée
L'utilisation de pointeurs de fonction membre statiques comme rappels pour les API C peut apparaître tentant, mais c'est une pratique dangereuse qui porte atteinte à la norme C.
Raisonnement
Le langage C a établi des réglementations dans la section 3.5 pour garantir l'uniformité des types dans les déclarations, en particulier pour fonctions et objets. Cependant, elle autorise des écarts dans les types de tableaux liés aux limites principales des tableaux.
De plus, dans la section 7.5, la norme souligne que les fonctions avec des liens de langage différents (tels que C versus C ) sont des types intrinsèquement distincts, même si elles sont par ailleurs identiques.
Conséquences
Essayer d'utiliser des pointeurs de fonctions membres statiques comme rappels de l'API C peut entraîner des problèmes imprévisibles et spécifiques à la plate-forme. Il existe un risque que les prototypes de fonctions et les conventions d'appel ne correspondent pas, conduisant à un comportement ou à des exceptions non définis.
Approche recommandée
Pour maintenir la sécurité et la portabilité, il est essentiel de respecter les stipulations de la norme et déclarer les rappels de l'API C comme extern "C." Cela garantit que la cible de rappel s'aligne sur les liaisons du langage C utilisées par l'appelant.
Conclusion
Bien que la tentation d'utiliser des pointeurs de fonction membre statiques comme rappels de l'API C puisse existent, c'est une pratique dangereuse et non portable. Les développeurs doivent donner la priorité au respect de la norme C et déclarer les rappels comme "C" externe pour éviter des problèmes inattendus dans leur code.
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!