[英]Write C++ code in C style
如果我們想用C來寫一個模塊並有將其編譯為C ++ g++
,是不是OK開發的代碼在C ++中,沒有任何自己的類,只有使用“全局/靜態函數”在C? 所以,簡單地說,用C ++編寫代碼C(只有很少的系統頭改變等)
是。 事實上,這通常是一個好主意,因為C ++強制執行比C更強的類型檢查。
除了僅使用函數之外 ,您還需要做一些事情,特別是您應該將所有函數標記為extern "C"
以避免名稱錯位並強制執行C調用約定(並且偶然阻止您進行重載)。 如果您希望能夠在C中編譯它,則在聲明變量( enum
for enumerations)時必須使用struct
限定類型,或者提供相應的typedef ...
或者,您可以將-xc
添加到編譯器選項以告訴g ++將代碼編譯為C(如果您無法將命令行從g++
更改為gcc
,則可能無法添加編譯器標志......)
雖然大多數C源代碼將編譯為C ++代碼而不進行任何更改,但某些語言差異會阻止C ++成為C的嚴格超集。
在C中有效但在C ++中無效
int *j = malloc(sizeof(int) * 5);
兩者都有效:
int *j = (int *) malloc(sizeof(int) * 5);
您可以在此處找到詳盡的不同列表
你可以用很多樣式“編寫C ++” - 這是該語言的基本優勢之一。 這包括C程序通用的嚴格程序,平面編程風格。 你仍然會編寫C ++,但代碼最終應該對任何C程序員都非常熟悉。
嚴格地說,您將不得不使用C ++頭文件<cstdio>
等,並且所有C庫函數都在std
命名空間中。 也許這是你應該使用using namespace std;
的少數合法情況之一using namespace std;
! :-)
我沒有看到任何這樣的理由,g ++和gcc只是同一編譯器的不同前端。 因此,對於所有涉及效率,字節兼容性等的內容,混合由兩者生成的.o
文件應該沒有問題。
C和C ++有可以使你的麻煩,從東西,如起始許多細微的差別sizeof 'a'
beeing不同但sizeof c
是相同的(如果c
是一個char
),為bool是在一個類型和在宏其他, true
的C ++類型bool
和C中的int
,C不允許在for
中使用static
聲明...
即使C和C ++有一個大的交集,如果你把自己限制在兩個社區中被認為是良好的編碼實踐,你很快就會發現交集幾乎是空的。 這涉及指針轉換,使用malloc
或new
,復合初始化器與構造函數的分配,可變長度數組與向量類...
只是不要這樣做。 您所需要的只是創建一個適合兩者的漂亮界面。
不, g++
和gcc
不是同一編譯器的兩個不同的前端。
它們是兩個不同的驅動程序 ,兩個不同的編譯器( cc1plus
和cc1
)共享相同的中端和后端代碼(使用GCC構建樹,在gcc/libbackend.a
,用詞不當,因為它包含兩個中端(中端是GCC的共同部分,C,C ++,Ada,Fortran,Objective-C,...以及許多目標機器共同;它是GCC的最大部分,並且在一組通用的內部表示上工作,值得注意的是Gimple)和后端(GCC將Gimple表示轉換為匯編的部分,使用RTL -a依賴於目標的內部表示)。
但是cc1和cc1plus有不同的前端代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.