因項目須要,將一個早期的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++格式,但函數名有差別,致使沒法連接。
解決辦法:將函數在函數體外以正確的方式從新聲明。