简体   繁体   中英

Does extern “C” have any effect in C?

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.

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

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

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?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM