解決辦法和修改辦法的總體思想
1、在代碼的語義和功能不變的情況下,進行c->c++的轉變,消除編譯器的跨平臺編譯報錯問題;
2、遇到編譯問題,先看編譯器提示信息,然后逐個排查和定位,去解決問題。
?
?
1、當遇到c中的代碼,數組使用動態變量初始化在GCC能編譯通過,在MSVC上編譯不過的時候解決辦法
例如:
原版C:?
void func1(int number)
{
int a[number];
}
移植版C++
void func1(int number)
{
? ?std::vector<int> a(number);
}
2、當遇到c中的代碼,某函數在不同的.c中實現了兩次,且是同樣的函數名稱在GCC能編譯通過,在MSVC上編譯不過的時候解決辦法
在報錯的.cpp文件中,修改該聲明和實現的相同函數名稱的函數為另外一個名字
3、當遇到c中的代碼,某函數在.cpp和.h文件都已經聲明和實現過,在另外一個.cpp中調用該函數的時候,報錯該函數符號在另外一個.cpp中是外部符號,無法識別在GCC能編譯通過,在MSVC上編譯不過的時候解決辦法
找到該項目中的所有.h 試著刪掉 以下的代碼片段
#ifdef __cplusplus?
extern "C" {?
#endif
//一段代碼
#ifdef __cplusplus?
}?
#endif?
?
4、當遇到c中的代碼,某宏定義的函數實現? 在GCC能編譯通過,在MSVC上編譯不過的時候解決辦法
在不變語義的情況下,改為函數
?
?
?