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

因項目須要,將一個早期的gcc編譯運行正常的c工程修改成g++,問題不少。c++

1 大量的類型不匹配express

究其緣由,g++是不容許不一樣類型指針互相賦值的,在出錯位置加入強制類型轉換便可。數組

2 部分變量was not declared in the scope函數

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

3 initializer-string for array of chars is too longstring

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

4 types may not defined in sizeof expressionsio

工程中有這樣的宏編譯

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

使用時用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++格式,但函數名有差別,致使沒法連接。

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

相關文章
相關標籤/搜索