2016-11-24 76 views
1

我遇到了一些难以编写的旧C代码的问题。 我想使用C++编译器并使用此旧代码的一部分。在C++中使用(丑)C代码与extern“C”

header.h

extern "C"{ 
int header(); 
} 

header.c

#include "header.h" 
int header(){ 
const int i=20; 
int *ptr = &i; 
} 

这是使用gcc(4.9.3)配有一个警告(没有外部的 “C”)编译但在G ++有错误: “从'const int *'无效转换为'int *'[-fpermissive]”

我对此代码没有直接的兴趣,但想知道是否有办法让任何工作C cod用C++编译器编译? (这只是一个例子,C,但不是在C什么是“工作” ++像真正的问题是用gcc编译但不使用g ++)

+2

“如果有一种方法可以使用C++编译器编译任何可用的C代码?”不,尽管宣布的目标是让C++成为“更好的C”,但两者结束了相当不同的语言。 – dasblinkenlight

+2

尽量不要让它变得更难。只要C++编译器用'extern“C”看到C函数的声明,那么你可以继续用C编译器编译它,连接器也会同样开心。 –

+0

这是两种语言中非常糟糕的代码。 – Olaf

回答

4

你有两种选择:

  1. 修复所有的错误,是无效的C++或
  2. 编译的C文件用gcc,并使用C链接它们++文件

extern "C"不仅使C++编译器,当它被调用函数使用的C函数名。如果您选择使用C++编译器编译这些函数,则不会使这些函数实际上使用C规则进行编译。