這些是一些自己在開發過程中與移植程式過程中碰到的linux程式設計與windows程式設計的差異之處,以及從網上總結了一些解決辦法和經驗。
1. 檔案與目錄的大小寫以及路徑分隔符的差別。
windows下不區分大小寫,路徑分隔符一般使用"\";linux下區分大小寫,路徑分隔符使用"/"。
2. itoa()函式在linux下並不存在。
所以使用類似sprintf();之類的函式是個不錯的替代。(為什麼說是類似函式,看下面一條啦)
3. _snprintf()與_vsnprintf()的差別。
sprintf()不能檢查目標字串的長度,可能造成眾多安全問題,所以都會推薦使用snprintf()。
int _snprintf(
char
*buffer,
size_t
count
,const
char
*format [
,argument]..
.);
例如,要把c2字元產write給c1,比較安全的用法:
char c1[256]
;sa[
sizeof
(c1)
-1]= 0;
_snprintf(c1,
sizeof
(c1)
,"%s"
, c2);if
(c1[
sizeof
(c1)
-1]!
=0)
如果在write之前主動檢查一下c2的長度再申請c1的空間當然是最好的。
4. 在linux下並不存在std::exception(char*),可以使用logic_error型別代替exception。
5. 盡量使用stl與標準c庫,並且要按照標準c++語法來寫程式。
比如這種用法list< type1>::iterator iter;在windows下的編譯器下沒有編譯錯誤;但在linux下,就需要在前面增加typename才能順利編譯通過。
6. 在原始檔最後多加乙個或幾行的空行,以免蹦出警告:"no newline at end of file"。
7. windows中對ini檔案進行操作的所有函式在linux下都沒有對應函式。
建議自己寫乙個操作ini檔案的類,在stlchina上有乙個使用stl製作這種類的原理介紹和一小段**片段,自己擴充一下。
8. socket物件集要使用fd_set,不要使用fd_set。
9. stricmp()函式,在linux下用strcasecmp()函式替換。
10. 在linux下不存在invalid_socket、invalid_handle_value、socket_error、max_path、infinite、still_active等巨集定義。
11. 引數要求為char*的時候別忘了給傳進去的string加乙個.c_str()函式。
12. linux下不存在目錄操作時要包含的direct.h與io.h標頭檔案,而要包含相應的unistd.h與fcntl.h標頭檔案。
13. filelength()函式在linux也不存在,可以通過fstat()函式來替代。
使用檔案與目錄操作函式,不要使用類似_access帶下劃線的函式,取而代之有access函式可以通用。
14. #prgram once預編譯指令在linux下並不起作用,請使用以下標準方式來解決標頭檔案多次包含問題:
#
ifndef _***xx_h_
#define _***xx_h_
#endif
15. hash_map出現在後期版本的stl庫,為兼顧hasp與tree map,請可以通過以下巨集來解決:
// process hash_map
#if defined(_msc_ver)
#if _msc_ver >
= 1300
// hasp_map not standard container
#pragma warning(disable: 4996)
#include
// we believe _stlp_string included means using stlport
#elif defined(_stlp_string)
#include
#else
#define hash_map map
#endif
#endif
16. 為了區別不同os,一般可用的幾個巨集有:win32,__linux__,需要使用與os相關的內容,請一定用開關來寫。
17. 對於介面操作部分**,一定要把它與程式邏輯核心**用巨集分開來,這樣的**才好移植,不要交錯。
18. 不要假定可執行檔案一定有如.exe的副檔名。
19. 在父類中用typedef定義的型別,在子類並不能直接使用。
跨平台C 程式開發經驗小結
這些是一些自己在開發過程中與移植程式過程中碰到的linux程式設計與windows程式設計的差異之處,以及從網上總結了一些解決辦法和經驗。1.檔案與目錄的大小寫以及路徑分隔符的差別。windows下不區分大小寫,路徑分隔符一般使用 linux下區分大小寫,路徑分隔符使用 2.itoa 函式在linu...
C 跨平台開發心得小結
linux程式設計與windows程式設計的差異之處 1.檔案與目錄的大小寫以及路徑分隔符的差別 windows下不區分大小寫,路徑分隔符一般使用 linux下區分大小寫,路徑分隔符使用 2.itoa 函式在linux下並不存在 所以使用類似sprintf 之類的函式是個不錯的替代。為什麼說是類似函...
C 跨平台開發心得小結
linux程式設計與windows程式設計的差異之處 1.檔案與目錄的大小寫以及路徑分隔符的差別 windows下不區分大小寫,路徑分隔符一般使用 linux下區分大小寫,路徑分隔符使用 2.itoa 函式在linux下並不存在 所以使用類似sprintf 之類的函式是個不錯的替代。為什麼說是類似函...