在C ++中使用(丑陋)C代码与extern" C"

时间:2016-11-24 13:14:09

标签: c++ c

我遇到了丑陋的旧C代码问题。 我想使用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)进行编译(没有extern" C")但是在g ++中有错误: "来自' const int *'的无效转换到' int *' [-fpermissive]"

我对这段代码并不直接感兴趣,但是想知道是否有办法用C ++编译器编译任何可用的C代码? (这只是一个例子,"工作"在C中但不在C ++中,就像真正的问题是用gcc编译而不是用g ++编译)

1 个答案:

答案 0 :(得分:4)

您有两种选择:

  1. 修复所有无效的C ++或
  2. 错误
  3. 使用gcc编译C文件,并将它们与C ++文件链接
  4. extern "C"仅在调用函数时使C ++编译器使用C函数名。如果您选择使用C ++编译器编译这些函数,则不会使这些函数实际使用C规则进行编译。