因緣際會,看著別人把 C 的程式碼轉成 C++ ,然後原本的程式碼在 vs 2005 上編譯,就產生了 Link Error 。
要將 C 的程式碼弄成 C++ 編譯時可以吃的 object 的方式,目前碰到而處理的:
- 在 header file 中的變數宣告,要加上 extern 字樣,同理也得找個地方正式宣告,如 main.c 是不錯的地方。
- 接著,對於一些 C function 裡的 type 要詳細地敘述,儘管只是 void * ,例如 malloc 回傳的東西,如果接的 pointer 是 char * 的話,就得用 (char*)malloc 的方式使用。
至於出現 Link Error 的部分,有個現象會說找不到 _VARNAME 的定義,然而卻有定義 VARNAME 的變數,這次我發現的情況,是由於 header file 中用 extern 宣告出陣列,然後在 main.c 中並未完整地宣告陣列,例如:
- header file:
- extern in my_array[100];
- main.c:
- int my_array[];
這個情況,以 VS 2005 的環境,如果仍然用 main.c 來編譯,就會出現 link error ,其訊息類似找不到 _my_array 的樣子,至於解法有兩種:
- 將 main.c 更名為 main.cpp ,在 cpp 的規則下可以編過
- 將 main.c 中的 int my_array[]; 宣告,更新成 int my_array[100]; 即可
本身沒在研究語言,算是誤打誤撞解決的。
沒有留言:
張貼留言