Does extern "C" have any effect in C?
Asked Answered
N

3

14

I just got some C code that uses extern "C" to declare external functions like this:

extern "C" void func();

Is this valid C? I'm getting an error at this line, but I'm not sure if it's because of this or something else.

Needs answered 4/4, 2009 at 20:12 Comment(0)
E
32

No, it's not valid C. It should only be used in C++ code to refer to functions defined in C code. The extern "C" should be surrounded in a ifdef __cplusplus/#endif block:

// For one function
#ifdef __cplusplus
extern "C"
#endif
void func();

// For more than one function
#ifdef __cplusplus
extern "C"
{
#endif

void func1();
void func2();

#ifdef __cplusplus
}
#endif
Emarie answered 4/4, 2009 at 20:19 Comment(0)
O
13

this is a C++ notation to tell the compiler/linker to use C calling standards.

Usually that line is wrapped in an pre-processor statement.

#ifdef __cplusplus
extern "C" {
#endif

// stuff

#ifdef __cplusplus
}
#endif
Octavia answered 4/4, 2009 at 20:19 Comment(0)
D
2

Not valid in C. If present after preprocessing this will result in a diagnostic as per the standard.

For C++, this turns of name-mangling. See this for more details as to why it may be required. Can you post some more details?

Dormitory answered 4/4, 2009 at 20:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.