Maison > développement back-end > C++ > Puis-je obtenir l'adresse d'une fonction de bibliothèque standard en C ?

Puis-je obtenir l'adresse d'une fonction de bibliothèque standard en C ?

Patricia Arquette
Libérer: 2024-12-25 00:13:11
original
742 Les gens l'ont consulté

Can I Get the Address of a Standard Library Function in C  ?

Puis-je prendre l'adresse d'une fonction définie dans la bibliothèque standard ?

Présentation

Un programme C peut-il prendre l'adresse d'une fonction définie dans la bibliothèque standard, et si oui, dans quelles conditions ?

Réponse courte

Non, pas dans général.

Explication

Selon [namespace.std], former un pointeur vers une fonction de bibliothèque standard est un comportement non spécifié, sauf si la fonction est désignée comme adressable. Cela s'applique également aux fonctions membres.

Le premier appel à std::invoke

std::invoke(std::boolalpha, std::cout);
Copier après la connexion

Dans cet exemple, std::boolalpha est une fonction adressable désignée par [fmtflags.manip] . Par conséquent, cette ligne est bien formée et équivalente à :

std::cout.setf(std::ios_base::boolalpha);
Copier après la connexion

Le deuxième appel à std::invoke

std::invoke(static_cast<ctype_func>(std::tolower), 'A');
Copier après la connexion

Cependant, pour les fonctions définies dans , [ cctype.syn] indique que les fonctions spécifiques sont définies conformément à l'en-tête de la bibliothèque standard C . Nulle part dans est tolower désigné comme adressable, donc le comportement de ce programme n'est pas spécifié (peut-être mal formé) en raison de la tentative de former un pointeur vers tolower.

Conclusion

La sortie inattendue n'est pas garantie , et le code peut même ne pas être compilé. Cela s'applique également aux fonctions membres déclarées dans la bibliothèque standard 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal