Inhaltsverzeichnis
? Projektstruktur
1. hello.h —— C -Funktionserklärung (mit externen "C" -Streuer)
2. hello.c —— C -Funktionsinimposition
3.. main.cpp —— C Anrufe C -Funktion C -Funktion
? Kompilieren und Link
❗Wargend brauchst du externes "C"?
✅ Zusammenfassung: Schlüsselpunkte für die Verwendung von Extern "C"
Heim Backend-Entwicklung C++ C extern 'C' Beispiel

C extern 'C' Beispiel

Aug 03, 2025 am 05:05 AM

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.

C extern \

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

C extern

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:

C extern
  • #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.

C extern

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1596
276
C -Funktionsbeispiel C -Funktionsbeispiel Jul 27, 2025 am 01:21 AM

Funktionen sind die grundlegende Einheit des Organisierens von Code in C, die zur Realisierung der Wiederverwendung und Modularisierung von Code verwendet wird. 1. Funktionen werden durch Erklärungen und Definitionen erstellt, wie z. 2. Übergeben Sie Parameter beim Aufrufen der Funktion und geben Sie das Ergebnis des entsprechenden Typs nach Ausführung der Funktion zurück. 3. Die Funktion ohne Rückgabewert verwendet void als Rückgabeart, z. B. voidGreet (StringName), um Grußinformationen auszugeben. 4. Die Verwendung von Funktionen kann die Lesbarkeit der Code verbessern, die Duplikation vermeiden und die Wartung erleichtern, was das grundlegende Konzept der C -Programmierung ist.

C falten Ausdrücke Beispiel C falten Ausdrücke Beispiel Jul 28, 2025 am 02:37 AM

C OrdneRexpressions ist eine von C 17 eingeführte Funktion, um rekursive Operationen in variadischen Parametervorlagen zu vereinfachen. 1. linke Falte (Argumente ...) Summe von links nach rechts, wie z. B. Summe (1,2,3,4,5) Returns 15; 2. Logisch und (args && ...) Bestimmen Sie, ob alle Parameter wahr sind, und leere Pakete geben wahr; 3. Verwendung (std :: cout

C löschen vom Vektor während der Iteration C löschen vom Vektor während der Iteration Aug 05, 2025 am 09:16 AM

Wenn es beim Löschen eines Elements iteriert wird, müssen Sie vermeiden, einen fehlgeschlagenen Iterator zu verwenden. ①Die korrekt ist es, es zu verwenden. ② Die empfohlene "Erase-Remove" -Diom für die Stapeldeletion: vec.erase (std :: remove_if (vec.begin (), vec.end (), Zustand), vec.end ()), die sicher und effizient ist; ③ Sie können mit einem umgekehrten Iterator von hinten nach vorne löschen. Die Logik ist klar, aber Sie müssen auf die Bedingungsrichtung achten. Schlussfolgerung: Aktualisieren Sie den Iterator immer mit dem Return -Wert der Löschrückgabe und verbieten die Vorgänge auf dem fehlgeschlagenen Iterator, ansonsten werden undefiniertes Verhalten entstehen.

C char Array zum String -Beispiel C char Array zum String -Beispiel Aug 02, 2025 am 05:52 AM

Die Antwort lautet: Verwenden Sie den STD :: String Constructor, um das Zeichen -Array in std :: string zu konvertieren. Wenn das Array das Zwischenprodukt '\ 0' enthält, muss die Länge angegeben werden. 1. Für C-Stys, die mit '\ 0' enden, verwenden Sie std :: stringstr (chararray); Um die Konvertierung abzuschließen; 2. Wenn das char -Array die mittlere '\ 0' enthält, aber die ersten n Zeichen konvertieren muss, verwenden Sie std :: stringstr (Chararray, Länge); die Länge klar festlegen; 3. Wenn Sie ein Array mit fester Größe verarbeiten, stellen Sie sicher, dass es mit '\ 0' endet, und konvertieren Sie es dann. V.

C AUTO -Keyword -Beispiel C AUTO -Keyword -Beispiel Aug 05, 2025 am 08:58 AM

TheautokeYWordinc deducestheTypeOpAvariableFromitInitializer, MakingCodeCleanerandMoremaintainable.1.itucesverbosity, insbesondere mit komplexen Angaben

C Binär -Suchbaumbeispiel C Binär -Suchbaumbeispiel Jul 28, 2025 am 02:26 AM

Nicht anhörde

C mutex Beispiel C mutex Beispiel Aug 03, 2025 am 08:43 AM

STD :: Mutex wird verwendet, um gemeinsame Ressourcen zu schützen, um den Datenwettbewerb zu verhindern. Im Beispiel wird die automatische Verriegelung und Entsperrung von STD :: lock_guard verwendet, um die Sicherheit mit mehreren Threads zu gewährleisten. 1. Verwenden von std :: mutex und std :: lock_guard können die abnormalen Risiken vermeiden, die durch das manuelle Management von Schlössern eingeführt werden; 2. gemeinsame Variablen wie Zähler müssen bei der Modifizierung von Multi-Threads mit Mutex geschützt werden. Das Lock-Management im Raiii-Stil wird empfohlen, um eine Ausnahmesicherheit zu gewährleisten. 4. Vermeiden Sie Deadlocks und mehrere Schlösser in einer festen Reihenfolge; 5. Jedes Szenario des Multi-Thread-Zugriffs auf gemeinsame Ressourcen sollte die Mutex-Synchronisation verwenden, und das endgültige Programm gibt korrekt erwartet: 10000 und tatsächlich: 10000.

Wie benutze ich STD :: Source_location von C 20 für eine bessere Protokollierung? Wie benutze ich STD :: Source_location von C 20 für eine bessere Protokollierung? Aug 11, 2025 pm 08:55 PM

Verwenden Sie STD :: source_location :: current () als Standardparameter, um den Dateinamen, die Zeilennummer und den Funktionsnamen des Anrufpunkts automatisch zu erfassen. 2. Sie können Protokollaufrufe über Makros wie #definelog (msg) log (msg, std :: socal_location :: current ()) vereinfachen; 3.. Sie können den Protokollinhalt mit Protokollebene, Zeitstempel und anderen Informationen erweitern. 4. Um die Leistung zu optimieren, können Funktionsnamen weggelassen werden oder Standortinformationen können in der Versionsversion deaktiviert werden. 5. Column () und andere Details werden selten verwendet, sind jedoch verfügbar. Die Verwendung von STD :: Source_Location kann den Debugging -Wert von Protokollen mit extrem niedrigem Overhead erheblich verbessern, ohne manuell in FIL zu bestehen

See all articles