Quick Earn Money

What is the effect of extern "C" in C++?

 

In C++, the extern "C" syntax is used to declare functions or variables with C linkage. This is particularly useful when you want to interact with C code or libraries from within a C++ program, as C and C++ have different name mangling rules.

When you declare something with extern "C", it instructs the compiler to use C linkage for that entity, which affects how its name is represented in the compiled object file. C linkage ensures that the name is not subjected to C++ name mangling, making it possible to link C and C++ code seamlessly.

Here's an example to illustrate the use of extern "C":

Assume you have a C library with the following function declaration in a header file named mylib.h:

c
// mylib.h #ifndef MYLIB_H #define MYLIB_H #ifdef __cplusplus extern "C" { #endif void foo(); #ifdef __cplusplus } #endif #endif

In this example, the extern "C" block is conditionally defined for C++ using #ifdef __cplusplus to ensure that C linkage is applied when compiling C++ code.

Now, let's see how you can use this C library in a C++ program:

cpp
// main.cpp #include <iostream> #include "mylib.h" int main() { std::cout << "Calling foo() from C library..." << std::endl; foo(); return 0; }

In this example, the foo() function is declared with C linkage using the extern "C" syntax. When you compile and link the C++ program with the C library, the linkage ensures that C++ name mangling is not applied to the foo() function.

The extern "C" syntax is crucial when you want to call C functions from C++ code, especially when dealing with legacy C libraries or interacting with code that doesn't follow C++'s naming conventions. It helps maintain compatibility and allows C and C++ code to work together seamlessly.

Comments