我有一个包含C和C ++代码的.cpp源文件。 C代码不使用g ++编译,所以我需要使用gcc。
使用extern "C" {}
不起作用,因为这只是告诉编译器如何处理函数名称,我希望g ++完全代表gcc的一部分代码,就像g ++代表另一部分。
我知道我可以将它们放在单独的文件上,但是我必须使用C代码为该文件创建一个标头,以便能够在其他C ++文件中使用它,这就是我想要的避免。我不希望除C ++代码之外的任何人都可以看到这些函数。
这有意义吗?这甚至可能吗?谢谢!
答案 0 :(得分:5)
将它们放在单独的文件中,并使用C ++声明文件中的函数。您无需创建标题。
C ++代码(blah.cpp):
// C function declarations
extern "C" {
int foo(int x);
int bar(int x);
}
// C++ function definitions
int qux(int x) {
return foo(bar(x));
}
C代码(blah.c):
// C function definitions
int foo(int x) {
return x * 3;
}
int bar(int x) {
return x * 2;
}
答案 1 :(得分:1)
这是一个很好的想法,但我不认为g ++为此做出任何规定。也许你可以使用g ++标志,使它对它所接受的内容更加宽容,同时在某种程度上修复C代码,直到它们在中间相遇。
答案 2 :(得分:1)
制作相同来源的2个副本,一个由g ++编译,另一个由gcc编译。使用
阻止C ++部分#ifdef __cplusplus
#if 0
...
#endif
#endif
这样gcc就不会尝试编译C ++代码。
将extern“C”{}添加到g ++块,以便它知道C部分的函数原型。你不需要标题来做到这一点;它可以写在源文件中。
单独编译并链接它们。