Externe "C" wird verwendet, um das Verknüpfungsproblem zu l?sen, wenn c C -Funktionen C aufruft. 1. Verwenden Sie #ifdef __cplusplus, um das Externe "C" in die Header -Datei einzuwickeln, um sicherzustellen, dass der C -Compiler den Namen nicht ?ndert und der C -Compiler ihn normal verarbeiten kann. 2. Die C -Implementierungsdatei ist in Standard -C -Syntax geschrieben, und die Zieldatei wird kompiliert und generiert. 3. Das Hauptprogramm C enth?lt die Header -Datei und ruft die Funktion auf. Verwenden Sie beim Kompilieren G die Zieldateien von C und C und rufen Sie schlie?lich die C -Funktion CALL und geben Sie das Ergebnis aus. Daher kann eine gemischte Zusammenstellung und ein Zusammenhang zwischen C und C erreicht werden, solange die externe Erkl?rung zur Schutzfunktion "c" korrekt verwendet wird.
extern "C"
ist praktisch, wenn Sie in C -Code geschriebene Funktionen aufrufen oder wenn Sie hoffen, dass der C -Code C -Funktionen anrufen kann. Seine Hauptfunktion besteht darin , den C -Compiler mitzuteilen: Dieser Teil des Codes verwendet die Verknüpfungsmethode von C und ?ndert den Namen von C nicht

Hier ist ein einfaches extern "C"
-Beispiel, das zeigt, wie man C -Funktionen in C aufruft.
? Projektstruktur
. ├── Hallo.c // c Implementierungsdatei ├── Hallo.h // C -Header -Datei ├── main.cpp // C Hauptprogramm
1. hello.h
—— C -Funktionserkl?rung (mit externen "C" -Streuer)
// Hallo.h #ifndef hello_h #define hello_h #ifdef __cplusplus extern "c" { #endif void sagt_hello (); #ifdef __cplusplus } #endif #endif // hello_h
? veranschaulichen:

-
#ifdef __cplusplus
soll den C -Compiler wissen lassen, dass dies eine C -Umgebung ist. - Der
extern "C"
-Block wird nur wirksam, wenn C kompiliert, und der C -Compiler ignoriert ihn. - Diese Schreibweise kann sicherstellen, dass diese Header -Datei sowohl von C als auch von C verwendet werden kann
2. hello.c
—— C -Funktionsinimposition
// Hallo.c #include <stdio.h> #include "Hallo.h" void say_hello () { printf ("Hallo von C! \ n"); }
? Dies ist eine Standard -C -Funktion. Beim Kompilieren wird C -Compiler (wie gcc
) verwendet. Der Funktionsname ist say_hello
in der Symboltabelle.
3.. main.cpp
—— C Anrufe C -Funktion C -Funktion
// main.cpp #include "Hallo.h" int main () { Say_hello (); // Rufen Sie die C -Funktion zurück. }
? Da die Erkl?rung say_hello()
in hello.h
in extern "C"
eingewickelt ist, nennt der C -Compiler den Manging dieses Funktionsnamens nicht und der Linker kann das durch C -Kompilierung generierte say_hello
-Symbol finden.

? Kompilieren und Link
Sie müssen die C- und C -Dateien separat kompilieren und dann miteinander verknüpfen:
GCC -c Hello.c -o Hello.o # Kompilieren Sie die C -Datei g Main.cpp Hello.o -o Main # Verwenden
laufen:
./haupts?chlich # Ausgabe: Hallo aus C!
?Wargend brauchst du externes "C"?
C unterstützt die Funktion überladung, sodass der Compiler den Funktionsnamen (Name Mangling) ?ndert , wie z. B.:
-
void func()
kann_Z4funcv
werden -
void func(int)
kann_Z4funci
werden
Der C -Compiler ?ndert den Namen nicht, func
ist func
.
Wenn Sie eine C -Funktion direkt in C aufrufen, aber extern "C"
nicht hinzufügen, sucht C nach dem ge?nderten Namen und der Link -Fehler ist aufgetreten: undefined reference to 'say_hello'
(tats?chlich stimmt der Name nicht überein).
? Zusammenfassung: Schlüsselpunkte für die Verwendung von Extern "C"
- Wird verwendet, um C -Funktionen im C -Code aufzurufen oder c C -Funktionen C -Funktionen (letztere erfordert eine zus?tzliche Verarbeitung).
- Wickeln Sie es in die Header -Datei mit
#ifdef __cplusplus
um die Kompatibilit?t sicherzustellen. - Es beeinflusst nur die Verbindungsmethode und wirkt sich nicht auf die Syntax aus.
- H?ufig in Systembibliotheken und dynamischen Bibliotheken (wie
.so
/.dll
) Schnittstellen vorkommt.
Grunds?tzlich ist das. Denken Sie daran: C passt C an C, fügen Sie der Header -Datei extern "C"
-Strückserven hinzu, verwenden Sie den C -Compiler, um die C -Datei w?hrend der Kompilierung zu kompilieren und sie einfach mit g zu verknüpfen .
Das obige ist der detaillierte Inhalt vonC extern 'C' Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Installac Compiler Likeg usepackAGeMaRaGerSordie-EntwicklungentoolsDendontheos.2.Writeac Programandsaveitwitha.Cppextesion

Der benutzerdefinierte Allocator kann verwendet werden, um das Speicherzuweisungsverhalten von C -Containern zu steuern. 1. Der Loggingallocator im Beispiel implementiert die Speicherbetriebsprotokollierung durch überlastung, Zuordnung, Deallocation, Konstruktion und Zerst?rung von Methoden; 2. Der Allocator muss Value_Type und Wiederherstellungsvorlagen definieren, um die Umwandlungsanforderungen des STL -Containertyps zu erfüllen. 3. Die Allokatorin l?st die Protokollausgabe w?hrend der Konstruktion und Kopie aus, was für die Verfolgung des Lebenszyklus geeignet ist. 4. Die tats?chlichen Anwendungen umfassen Speicherpools, gemeinsamer Speicher, Debugging -Tools und eingebettete Systeme. 5. Seit c 17 kann konstruieren und zerst?ren k?nnen standardm??ig von std :: allocator_traits verarbeitet werden

Verwenden Sie die Funktion STD :: System (), um Systembefehle auszuführen, die Header-Dateien einbeziehen und in C-Style-Befehle wie STD :: System ("LS-L") eingeben müssen, und der Rückgabewert ist -1, was bedeutet, dass der Befehlsprozessor nicht verfügbar ist.

Erstellen Sie eine Projektverzeichnisstruktur, einschlie?lich cmakelists.txt, src/ und include/; 2. Schreiben Sie cmakelists.txt, geben Sie die CMAKE -Version, den Projektnamen, den C -Standard an und fügen Sie ausführbare Dateien hinzu. 3. Verwenden Sie MkDirbuild, um das Verzeichnis einzugeben und CMake auszuführen. Und CMake-Build. zur Zusammenstellung; 4. Fügen Sie mehrere Quelldateien über add_execable hinzu und verwenden Sie die Header -Dateipfad. 5. Verwenden Sie Find_Package, um externe Bibliotheken zu finden und mit target_link_libraries zu verknüpfen. 6.

Cs Stack ist ein Containeradapter in STL. Es folgt dem Prinzip des Back-in-First-Outs und muss Header-Dateien enthalten. Fügen Sie Elemente durch Push hinzu, Pop entfernt das obere Element und zugreift auf die Oberseite des Stapels. überprüfen Sie vor der Operation, ob es leer ist, was h?ufig in Szenarien wie Expressionsbewertung und Backtracking verwendet wird.

TheautokeYwordletStheCompilerdeduciabletypesFrominitializer, reduzierverbosity undimpultingMainainability

Die Antwort besteht darin, eine Klasse zu definieren, die den erforderlichen Alias ??und Operationen enth?lt. Setzen Sie zun?chst Value_Type, Referenz, Zeiger, Differenz_Type und Iterator_Category, und implementieren Sie dann Dereferenz-, Inkrement- und Vergleichsvorg?nge. Geben Sie schlie?lich die Methoden von Beginn () und End () im Container zur Rückgabe der Iteratorinstanz an, sodass sie mit STL -Algorithmen und Reichweite für Schleifen kompatibel ist.

AstaticVariableInc intainssitesValuebetweenFunctionCallsandisinitializedonce.2.Insieafunction, ItpreservesTateAcrosscalls, SHOSCOUNTINGITIONATIONEN.3.Inacklass, itissharedamongallinstances und mustdefinedEdetheclasstoAwidaVoidlink -Linksverknüpfungstropfen
