__cplusplus macro to tell g++ about C header declarations not working strangely
c, c++, g++
Solution
The `extern "C"` only tells the compiler (actually, the linker) that C++ name mangling doesn't apply to the functions declared in that scope. It has nothing to do with the syntax or keywords themselves.
Your best solution is to rename the conflicting symbols.
Problem
I have a mix of C C++ code. All compiled with g++. Wherever I have C headers I have the contents of the header file included inside ``` #if defined(__cplusplus) extern "C" { #endif ``` and ``` #if defined(__cplusplus) extern "C" { #endif ``` But in one C header file I get g++ compilation errors where I have accidentally used a parameter name as template , which obviously is incorrect and in conflict with c++ keyword template. I know I can go and change this parameter name, but I am thinking why is this `extern "C"` declaration not working and why is the header file considered as C++ code and not C as I intended to. g++ version 4.1.1 Linux Red Hat Enterprise.