使用gcc规则使g ++编译C

时间:2011-12-16 00:04:56

标签: gcc g++

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

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

我知道我可以将它们放在单独的文件上,但是我必须使用C代码为该文件创建一个标头,以便能够在其他C ++文件中使用它,这就是我想要的避免。我不希望除C ++代码之外的任何人都可以看到这些函数。

这有意义吗?这甚至可能吗?谢谢!

3 个答案:

答案 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部分的函数原型。你不需要标题来做到这一点;它可以写在源文件中。

单独编译并链接它们。