2016-11-24 77 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規則進行編譯。