C中的extern关键字用于更多功能

时间:2014-02-05 12:10:19

标签: c++ c extern

我想在C和C ++中包含一个头文件,我在C代码中定义了一个函数,在外部库中定义了很少的函数。

#if defined(__cplusplus)
extern "C" {
#endif

void func0();

#if !defined(__cplusplus)
extern {
#endif

void func1();
int func2(int);

} /* extern */

从C源文件

编译时,此代码会产生编译错误
error C2059: syntax error : '{'

是否可以直接修复语法错误,或者我必须使用一些宏?

EXTERNCPP void func0();
EXTERNC void func1();
EXTERNC int func2(int);

编辑1: 我不问 Effects of the extern keyword on C functions,我只想问是否可以轻松修复语法。如果不可能,我仍然可以完全删除C部分

编辑2: 澄清我想要得到什么。如果包含标题

来自C ++:

extern "C" void func0(); 
extern "C" void func1(); 
extern "C" int func2(int);

来自C:

void func0(); 
extern void func1(); 
extern int func2(int);

3 个答案:

答案 0 :(得分:3)

不需要

extern {。您需要删除它: -

#if defined(__cplusplus)
extern "C" {
#endif

void func0();

#if !defined(__cplusplus)

#endif

void func1();
int func2(int);

#if defined(__cplusplus)
}
#endif

答案 1 :(得分:2)

在编译为C头时,您可以简单地省略extern {行。

答案 2 :(得分:1)

#if defined(__cplusplus)
extern "C" {
void func0();
#endif

#if !defined(__cplusplus)
void func1();
int func2(int);
#endif

#if defined(__cplusplus)
}
#endif

* [编辑]回答您的上次修改

void func0(); /* included in both versions */

#if defined(__cplusplus)
extern "C" {
void func1(); 
int func2(int);
#endif

#if !defined(__cplusplus)
extern void func1(); 
extern int func2(int);
#endif

#if defined(__cplusplus)
}
#endif

如果您想在C:

中使用func0作为extern
#if defined(__cplusplus)
extern "C" {
void func0();
void func1(); 
int func2(int);
#endif

/* C block */
#if !defined(__cplusplus)
extern void func0();
extern void func1(); 
extern int func2(int);
#endif

#if defined(__cplusplus)
}
#endif

如果您根本不想使用它(来自C),请将其从C块中删除