使gcc编译C使用gcc规则
我有一个包含C和C++代码的.cpp源文件。 C代码不使用g ++编译,所以我需要使用gcc。使gcc编译C使用gcc规则
使用extern "C" {}
不起作用,因为这只是为了告诉编译器如何处理函数名称,我希望g ++完全像gcc一样代码的一部分,并像g ++一样。
我知道我可以把它们放在不同的文件上,但是我必须为C文件创建一个头文件,以便能够在其他C++文件中使用它,这就是我正在尝试的避免。我不希望这些功能对除C++代码以外的任何人可见。
这有道理吗?这甚至有可能吗?谢谢!
将它们放在单独的文件中,并用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;
}
这是一个不错的主意,但我不认为G ++做任何规定这个。也许你可以使用g ++标志,使它更容易接受它,同时修正C代码,直到它们在中间相遇。
制作2份相同的源文件,一份由g ++,另一份gcc编译。用
阻止C++部分#ifdef __cplusplus
#if 0
...
#endif
#endif
这样gcc就不会尝试编译C++代码。
将外部“C”{}添加到g ++块,以便了解C部件的函数原型。你不需要一个头部来做到这一点;它可以写入源文件。
单独编译并链接它们。
这不会导致代码永远不会被编译?代码位于`#if 0`和`#endif`之间。 – mpcoder 2011-12-17 02:26:11
是的,那有效。实际上,这就是我现在正在做的事情。尽管有很多函数和结构声明 - 我试图避免粘贴所有这些。我想知道是否有像#pragma之类的魔术。 – mpcoder 2011-12-17 02:19:05