我想在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);
答案 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块中删除