Maison  >  Article  >  développement back-end  >  ## Pointeurs de fonctions de membres statiques en tant que rappels de l'API C : un dilemme de sécurité et de portabilité ?

## Pointeurs de fonctions de membres statiques en tant que rappels de l'API C : un dilemme de sécurité et de portabilité ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 16:39:03127parcourir

##  Static Member Function Pointers as C API Callbacks:  A Safety and Portability Dilemma?

Pointeurs de fonction membre statiques comme rappels dans les API C : un dilemme de sécurité et de portabilité

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn