將gcc工程修改成g++工程問題一覽 原

因項目需要,將一個早期的gcc編譯運行正常的c工程修改爲g++,問題很多。

1 大量的類型不匹配

究其原因,g++是不允許不同類型指針互相賦值的,在出錯位置加入強制類型轉換即可。

2 部分變量was not declared in the scope

gcc下運行正常的代碼,g++編譯出錯,原因爲c++要求函數或變量在使用前必須要聲明,具體問題具體分析即可。

3 initializer-string for array of chars is too long

定義的字符數組長度過短,而初始化的數組過長引起。gcc對數組寬容度很高。

4 types may not defined in sizeof expressions

工程中有這樣的宏

#define kvec_t(type) struct { size_t n, m; type *a; }

使用時用sizeof(kvec_t(int)),在gcc下正常,g++報錯

查找問題,g++下sizeof中用struct的語法是不合法的,該問題的解決辦法是將struct重新定義成typedef的形式,siziof(struct_test)的形式。

5 uninitialized const

原因是工程中定義的全局常量數組未初始化 const unit8_t a[8]。

將其初始化即可。

6 出現部分函數 未定義的引用  undefined reference

程序中出現的問題包括:

(1)原工程使用extern c對部分函數進行修飾,g++編譯後這部分函數未被編譯成g++格式,導致鏈接不到。註釋掉這些extern c 問題解決;

(2)在函數體內部使用extern來聲明其他文件中的函數,g++雖然將兩者都編譯成g++格式,但函數名有差異,導致無法鏈接。

解決辦法:將函數在函數體外以正確的方式重新聲明。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章