我遇到了丑陋的旧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 ++编译)
答案 0 :(得分:4)
您有两种选择:
extern "C"
仅在调用函数时使C ++编译器使用C函数名。如果您选择使用C ++编译器编译这些函数,则不会使这些函数实际使用C规则进行编译。