Het mechanisme extern "C" biedt de mogelijkheid om te communiceren met code geschreven in C. Dit maakt het mogelijk om C-bibliotheken te gebruiken en vergemakkelijkt de verbinding tussen C++ en andere talen.
Geschiedenis van de vraag: Vanaf het prille begin was de taal C++ gebouwd op basis van C, maar had het zijn eigen kenmerken, waaronder 'name mangling', ter ondersteuning van function overloading en andere functionaliteiten.
Probleem: De naam van een functie in C++ wordt gecompileerd tot een symbool met een aanvullende structuur (mangled), maar in C is er geen dergelijke transformatie. Hierdoor is het niet mogelijk om eenvoudig een C-header aan een C++-compiler toe te voegen zonder extra inspanningen.
Oplossing:
Het omwikkelen van functies in de constructie extern "C" verhindert 'name mangling', waardoor ze zichtbaar worden voor de code die is gecompileerd met de C-compiler.
Voorbeeldcode:
#ifdef __cplusplus extern "C" { #endif void foo(int); #ifdef __cplusplus } #endif
Belangrijke kenmerken:
Kan je functies met extern "C" overbelasten?
Nee, overbelasting is niet mogelijk, omdat de standaard C-functienaam wordt gebruikt.
Wat gebeurt er als je een templatefunctie declareert als extern "C"?
Een compilatiefout, omdat templates een aparte functie zijn van C++ en niet worden ondersteund in C.
Kan extern "C" worden gebruikt op het niveau van een afzonderlijke klasse?
Nee, het is alleen voor functies en variabelen, niet voor klassen of methoden.
Een C++-project sluit een externe C-bibliotheek aan zonder extern "C", waarna de code niet linkt vanwege naamconflicten.
Voordelen:
Nadelen:
Extern "C" wordt gebruikt in headerbestanden bij integratie van externe C-bibliotheken.
Voordelen:
Nadelen: