2011-12-16 142 views
2

我有一个包含C和C++代码的.cpp源文件。 C代码不使用g ++编译,所以我需要使用gcc。使gcc编译C使用gcc规则

使用extern "C" {}不起作用,因为这只是为了告诉编译器如何处理函数名称,我希望g ++完全像gcc一样代码的一部分,并像g ++一样。

我知道我可以把它们放在不同的文件上,但是我必须为C文件创建一个头文件,以便能够在其他C++文件中使用它,这就是我正在尝试的避免。我不希望这些功能对除C++代码以外的任何人可见。

这有道理吗?这甚至有可能吗?谢谢!

回答

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; 
} 
+0

是的,那有效。实际上,这就是我现在正在做的事情。尽管有很多函数和结构声明 - 我试图避免粘贴所有这些。我想知道是否有像#pragma之类的魔术。 – mpcoder 2011-12-17 02:19:05

1

这是一个不错的主意,但我不认为G ++做任何规定这个。也许你可以使用g ++标志,使它更容易接受它,同时修正C代码,直到它们在中间相遇。

1

制作2份相同的源文件,一份由g ++,另一份gcc编译。用

阻止C++部分
#ifdef __cplusplus 
#if 0 
... 
#endif 
#endif 

这样gcc就不会尝试编译C++代码。

将外部“C”{}添加到g ++块,以便了解C部件的函数原型。你不需要一个头部来做到这一点;它可以写入源文件。

单独编译并链接它们。

+1

这不会导致代码永远不会被编译?代码位于`#if 0`和`#endif`之间。 – mpcoder 2011-12-17 02:26:11