win cmd下g 編譯cpp的那些坑

2021-08-19 22:12:10 字數 1344 閱讀 5740

#這篇準備不定期長久更新,實在是win下的坑太多,做個記錄方便日後檢視。

#先準備零散寫,碰到什麼些什麼,積累多了再系統整理。

1.在win cmd下用g++直接編譯編碼格式為utf-8的原檔案時,需要原檔案中的原始碼裡不能有中文,準確的說遇到的問題是不能cout直接輸出中文。只要有中文輸出,執行時就會跳過(經過測試不是跳過是因字型編碼問題不顯示),或者在中文輸出後面有cin輸入操作會直接跳過之後的所有程式。

一下給一段簡單例子說明:

#includeusing namespace std;

int main()

{ cout>b;

cout這裡向外輸出中文

可以看到在輸出中文之前的**都是正常執行,到了輸出中文後,就出了問題。

同樣的**在linux下g++編譯utf-8檔案,輸出中文對程式無任何影響。

linux下執行結果:

解決方案:在win下把檔案編碼格式從utf-8轉換成cp936,再在win cmd用g++編譯就會正常執行。

例如:在vim命令模式下輸入:set fileencoding=cp936 然後儲存即可。

經驗:   在win cmd下編寫c++程式最好還是在編碼cp936下完成。

在linux下當然是用utf8了。

未完待續……

1.在函式傳遞字元引數時的不同表現

例如如下**:

string filename;

cin ,而在win下卻不用轉換也可以!!!

在linux下不加.c_str()的結果:

可以看到,是型別轉換的問題。然而,在win下不加也可以編譯通過正常執行。(這東西書上可不寫。。哎,踩坑進行中…)

解決辦法:不管是在win還是linux下還是都要用.c_str()進行轉換。

縱然win下是可以通過,理論上還是要轉換的,按照規則來吧,win下就當是意外。。

待續……

Ubuntu環境下使用g 編譯cpp檔案

第一次用g 編譯cpp檔案的時候報了undefined reference的錯誤,自定義類中的函式全部都無法找到,查詢資料後發現呼叫的類是需要鏈結的,本文以乙個小例子描述編譯的過程。其中class2類呼叫了class1類的成員函式,依賴於class1類,而test檔案呼叫了class2類的成員函式,...

Thrift windows下cpp編譯與使用

本文主要目的是分別介紹在windows平台下的thrift安裝步驟,以及實現乙個簡單的demo演示thrift的使用方法。安裝依賴庫 boost libevent 按需安裝,例項中我沒有使用 0.10.0版本的cpp編譯比較容易成功,編譯64位版本的libthrift.lib,開啟thrift 0....

Linux 環境下使用g 編譯C

下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可用以下命令編譯為可執行檔案...