Heim >Backend-Entwicklung >C++ >Kann ich die Adresse einer Standardbibliotheksfunktion in C erhalten?

Kann ich die Adresse einer Standardbibliotheksfunktion in C erhalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-25 00:13:11749Durchsuche

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

Kann ich die Adresse einer in der Standardbibliothek definierten Funktion übernehmen?

Übersicht

Kann ein C-Programm die Adresse einer in definierten Funktion übernehmen? die Standardbibliothek, und wenn ja, unter welchen Bedingungen?

Kurze Antwort

Nein, nicht in Allgemein.

Erklärung

Laut [namespace.std] ist das Bilden eines Zeigers auf eine Standardbibliotheksfunktion ein nicht spezifiziertes Verhalten, es sei denn, die Funktion ist als adressierbar gekennzeichnet. Dies gilt auch für Mitgliedsfunktionen.

Der erste Aufruf von std::invoke

std::invoke(std::boolalpha, std::cout);

In diesem Beispiel ist std::boolalpha eine adressierbare Funktion, die durch [fmtflags.manip] bezeichnet wird. . Daher ist diese Zeile wohlgeformt und äquivalent zu:

std::cout.setf(std::ios_base::boolalpha);

Der zweite Aufruf von std::invoke

std::invoke(static_cast<ctype_func>(std::tolower), 'A');

Allerdings gilt für in definierte Funktionen [ cctype.syn] gibt an, dass die spezifischen Funktionen gemäß dem C-Standardbibliotheksheader definiert sind. Nirgendwo in ist tolower als adressierbar gekennzeichnet, daher ist das Verhalten dieses Programms aufgrund des Versuchs, einen Zeiger auf tolower zu bilden, nicht spezifiziert (möglicherweise falsch geformt).

Schlussfolgerung

Die unerwartete Ausgabe ist nicht garantiert , und der Code wird möglicherweise nicht einmal kompiliert. Dies gilt auch für Mitgliedsfunktionen, die in der C-Standardbibliothek deklariert sind.

Das obige ist der detaillierte Inhalt vonKann ich die Adresse einer Standardbibliotheksfunktion in C erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn