gcc編譯器對寬字元的識別

2022-04-04 01:27:54 字數 1187 閱讀 5410

最早是使用vc++工具來學習c++,學的越多就越對vc擋住的我看不見的東西好奇,總想多接觸一些開發環境,今日抽空摸索了一下codeblocks這個開源的ide使用方法,配置的編譯器是mingw的gcc編譯器,gcc編譯多位元組集的字元還沒什麼問題,但遇到寬字元,發現編譯不通過,經過多方查詢,發現gcc對寬字元的支援分規則同我用熟了的cl編譯器有一些區別,具體用法如下:

gnu   c/c++編譯器gcc也可以正確支援wchar_t字元和字串,但是源**的儲存格式必須符合下面條件:

一:源**檔案的儲存編碼必須是utf-8;

二:utf-8編碼格式的源**檔案,不能有bom標誌頭.

只有源**檔案符合上面兩個條件,gcc才會正確支援wchar_t字元和字串.如果不符合上面兩個條件的話,有可能會編譯出錯,有可能會產生錯誤的wchar_t字元和字串.

gcc在windows平台下,wchar_t是16位型別,在linux平台下,wchar_t是32位型別.

另外,gcc提供了以下的引數開關來支援其它文字編碼的原始檔:

a)-finput-charset=charset

gcc在預設情況下,總是假設源**的編碼是utf-8,如果是其它編碼的源**檔案,源**裡面又用到了wchar_t的型別,則可以使用-finput-charset=charset這個引數來實現.例如通常使用gbk編碼的源**可以假如引數:-finput-charset=gbk

b)-fwide-exec-charset=charset

預設情況下,gcc在windows平台下,寬字串串常量的每個字元是16位utf-16型別,在linux平台下,寬字串串常量的每個字元是32位utf-32型別,            使用這個引數,可以改變寬字串串常量的型別.例如在x86的機器環境,linux作業系統下,要使例如 l"漢字" 編譯後儲存為utf-16的字串,則可以使用 -fwide-exec-charset=utf-16le

備註:我後來的解決方法過程,是直接用記事本重新開啟另存為utf-8格式,編譯通過,不過這樣感覺好麻煩,我還得再試試其它方法,最後不理會源**檔案儲存格式,只是在編譯選項那裡設定-finput-charset=gbk,這樣也是可以的(windows上的字元編碼貌似總是gbk的).

1 tchar szmsgtext[ ] = text("");

2 tchar szmsgtitle[ ] = text("

提示!");

gcc編譯器簡介

在linux中選擇gcc編譯器的原因是gcc執行效率高。gcc基本用法 gcc options filename 其中options為編譯選項。例子 執行指令 gcc hello.c 則對hello.c進行編譯,如果程式沒有語法錯誤,則產生可執行檔案a.out gcc預設檔名 執行可執行檔案指令 a...

gcc編譯器(二)

靜態庫 工程在呼叫靜態庫時,複製靜態庫源 加長,不節省程式空間字尾名.a 優點 編譯後不需要再依賴庫 以空間換時間 動態庫 工程建立對映關係,每次呼叫都需要去庫中載入,字尾名為.so 共享庫 程式輕便,便於公升級。小tips 所有程式執行都在記憶體中,硬碟只能儲存程式。靜態庫的建立 gcc c 原始...

GCC編譯器學習

不同的平台如x86和arm,一段程式跑起來到最下面會轉成彙編,彙編要轉成機器碼,機器碼會由於硬體平台不同而不同。有時候要程式設計序在arm上跑,必須針對arm寫程式,但是在arm上寫程式很麻煩 沒有很好的開發工具 所以我們就在x86平台上 windows 上把程式寫好,但是編譯的時候告訴它我們要執行...