Kann ein C-Programm die Adresse einer in definierten Funktion übernehmen? die Standardbibliothek, und wenn ja, unter welchen Bedingungen?
Nein, nicht in Allgemein.
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.
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);
std::invoke(static_cast<ctype_func>(std::tolower), 'A');
Allerdings gilt für in
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!