1樓:來自百丈寺揚眉吐氣的悟空
_t使得編譯器會根據編譯目標環境選擇合適的(unicode還是ansi)字元處理方式。原型類似:
#ifdef _unicode
/** enclose constant strings and literal characters in the _t macro to make
* them unicode constant strings when _unicode is defined.
*/#define _t(x) l ## x
#else /* not _unicode */
/** enclose ansi constant strings and characters in the _t macro.
*/#define _t(x) x
2樓:匿名使用者
_t巨集可以把一個引號引起來的字串,根據你的環境設定,自動變成ansi字串或者unicode字串。
如果你定義了unicode(預設是這樣的),那麼_t巨集會把字串前面加一個l。這時 _t("abcd") 就相當於 l"abcd" ,這是寬字串。
如果沒有定義,那麼_t巨集不會在前面加那個l,_t("abcd") 就等價於 "abcd"
3樓:匿名使用者
轉為unicode是為了使你的程式支援所有的語言,預設的ansi編碼在處理寬字符集時容易出錯。在瀏覽網頁的時候有時候就會出現亂碼的情況,就是因為編碼選擇不對。
4樓:107的週末
巨集就是純粹的文字替換
例如 定了巨集 #define aaa 100 那麼凡是在你程式中有aaa表示式的地方都會被100替換
5樓:
我不喜歡用巨集,太麻煩
6樓:大官乙
就是把一些正常人(不排除那些不正常的牛人)看不懂的數字和符號定義換成能看懂的代號(mfc裡一般是大寫),比如:#define anxiazuojian ox0516f
7樓:祥瑞之春
幫助記憶的字元,是不可變的常量,可用在所有該程式函式中
請教 vc 中 經常提到的巨集 究竟是什麼意思呢? 功能有哪些呢?
8樓:
#define語句 對於define語句,我們已經非常熟悉,一個巨集定義語句,主要用途是定義符號常量,如:
#define pi 3.14159
定義了圓周率pi 為3.14159,在以後用到3.14159的地方直接用pi代替即可,也方便我們編寫**,更大的好處是,如果我不想將圓周率定為3.
14159而要求更高精度,如3.14159265,則只需將上面的巨集定義改為:
#define pi 3.1415926
即可,無需到程式中用到這個值的地方逐一修改。
下面介紹#define的高階應用
a、 帶有引數的巨集定義語句我們也可以定義接受引數的符號,如aquare:
#define square(x) x*x
在以後用到square(a) 是,將會自動用a*a替換
b、接受可變引數個數的巨集巨集定義同樣可以接受可變引數個數的引數列表,為了向前處理器表明我們的巨集接受可變引數,可以在引數列表後面跟上三個點(...),在隨後的巨集定義表示式中,我們使用特殊符號__va_args__來代表具體引數(注意,前後是雙下劃線),例如我們定義:
#define debugprintf(...) printf("debug: "__va_args__)
則可用下面方式使用該巨集
debugprintf("hello world\n");
或者
輸出分別為(加入i=100,j=200):
debug: hello world
debug: i=100, j=200
c、#操作符如果我們在引數操作符的前面放置一個#,那麼c語言的前處理器將使用該引數生成一個常數字串,例如我們定義str如下:
#define str(x) #x
如果在程式中輸入語句
str(testing)
最終形式將會是
"testing"
而語句 printf(str(programming in c is fun:\n));將被轉換為:
printf("programming in c is fun:\n");
d、##操作符在巨集定義中,這個操作符可以把兩個符號連線起來。##操作符的前面或者後面可以是巨集的引數,前處理器在巨集的時候,將把該引數和##操作符前面或者後面的符號連線起來,以便建立一個新的符號。如:
#define printx(n) printf("%d\n", x##n)
語句中的字串「x##n」的##操作符將前面和後面的記號連線起來,合成一個新的記號,因此下面的巨集呼叫語句:
printf(20);
將被成如下形式:
printf("%i\n",x20);
9樓:匿名使用者
說明:(1)巨集名一般用大寫
(2)使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)巨集定義末尾不加分號;
(5)巨集定義寫在函式的花括號外邊,作用域為其後的程式,通常在檔案的最開頭。
(6)可以用#undef命令終止巨集定義的作用域(7)巨集定義可以巢狀
(8)字串" "中永遠不包含巨集
(9)巨集定義不分配記憶體,變數定義分配記憶體。
vc++裡程式設計為什麼用巨集?有什麼作用? 5
10樓:匿名使用者
巨集是編譯器在編譯**之前,預處理**時,用來替換**的。比如定義 #define max_path 256 ,編譯器在編譯**之前,會把程式中所有的 max_path 替換成 256 ,和「查詢-替換」的功能差不多,只不過這種替換不會反應到檔案中,只是編譯器自己知道而已。
使用巨集的好處是顯而易見的,當我們要在程式中多處使用同一個常量或**是,就可以定義成巨集,如果這個常或**要修改,我們只需修改巨集定義就可以了,不僅非常方便,而且不會因為某個地方沒修改而造成程式執行出錯。
vc的作用是什麼?
c語言中的「巨集」是指什麼?
11樓:加百列
巨集是一種預處理指令,它提供了一種機制,可以用來替換源**中的字串。
1、條件編譯:
c語言中,預處理過程讀入源**,檢查包含預處理指令的語句和巨集定義,並對源**進行相應的轉換,預處理過程還會刪除程式中的註釋和多餘的空白符號。
預處理指令是以#開頭的**行,#必須是該行除了空白字元外的第一個字元。#後是指令關鍵字,在#和指令關鍵字之間允許存在若干空白字元。
使用巨集進行條件編譯的用法與使用巨集防止多重引用類似。示例如下:
使用條件編譯,方便程式設計師在除錯程式的過程中,執行一些在程式釋出後並不需要執行的指令。只要在需要除錯的**前加上_debug的定義,就可以在除錯程式的過程中輸出除錯資訊。
這樣方便檢視程式在執行過程中有沒有出現錯誤,定位錯誤出現的地方。而在程式釋出之前,取消_debug的定義就可以不再執行除錯**。
2、巨集函式:
函式的呼叫是需要一定的時間和空間代價的。因為系統在呼叫函式時,需要保留"現場",即將程式要執行的指令的下一條指令的位置壓入棧,然後轉入呼叫函式去執行,呼叫完函式後再返回主調函式,恢復"現場",返回到棧裡儲存的的下一條指令的位置繼續執行。
所以函式的呼叫需要額外的時間和空間代價。
而巨集函式則不存在上述問題,巨集函式在預編譯時,同函式定義的**來替換函式名,將函式**段嵌入到當前程式,不會產生函式呼叫。
所以會省去普通函式保留現場恢復現場的時間,但因為要將定義的函式體嵌入到當前程式,所以不可避免的會佔用額外的儲存空間。
在頻繁呼叫同一個巨集的時候,該現象尤其明顯。巨集函式的示例定義如下:
#define max(a,b) ((a)<(b)?(b):(a))
巨集函式的優點在於避免函式呼叫,提高程式效率。
同時需要注意的是inline識別符號。inline也將函式定義為內聯的。但是使用行內函數需要注意的是:
函式體必須十分簡單,不能含有迴圈、條件、選擇等複雜結構,否則就不能作為行內函數了。
事實上,有時候即便你沒有將函式指定為行內函數,編譯器也會將一些簡單的函式作為行內函數處理,而對於一些複雜的函式,即使宣告為行內函數,編譯器也不會理會的。
inline函式的瓶頸就在於此,使用inline識別符號將函式宣告為內聯的,但這只是一種提示,到底編譯器有沒有優化還依賴於編譯器的實現,而使用巨集函式則完全由**本身控制。
但在使用巨集函式的時候,需要明確的是巨集函式只是簡單的替換,需要注意括號的使用。
擴充套件資料:
巨集的更多規則特性:
(1)巨集名一般用大寫。
(2)使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義。
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)巨集定義末尾不加分號。
(5)巨集定義寫在函式的花括號外邊,作用域為其後的程式,通常在檔案的最開頭。
(6)可以用#undef命令終止巨集定義的作用域。
(7)巨集定義不可以巢狀。
(8)字串" "中永遠不包含巨集。
(9)巨集定義不分配記憶體,變數定義分配記憶體。
(10)巨集定義不存在型別問題,它的引數也是無型別的。
12樓:榴蓮泡芙小蛋糕
是一種批量處理的稱謂。電腦科學裡的巨集是一種抽象(abstraction),它根據一系列預定義的規則替換一定的文字模式。
「巨集」這個詞的使用暗示著將小命令或動作轉化為一系列指令。
計算機語言如c語言或 組合語言有簡單的巨集系統,由編譯器或彙編器的前處理器實現。c語言的巨集前處理器的工作只是簡單的文字搜尋和替換,使用附加的文字處理語言如m4,c程式設計師可以獲得更精巧的巨集。
在objective-c語言源程式中,允許用一個識別符號來表示一個字串,稱為巨集,被定義為巨集的識別符號稱為巨集名。在編譯預處理時,對程式中所有出現的巨集名,都用巨集定義中的字串去替換,這稱為巨集替換或巨集。
巨集定義是由源程式中的巨集定義命令完成的,巨集替換是由預處理程式自動完成的。在objective-c語言中,巨集分為有引數和無引數兩種。
擴充套件資料
a類巨集是用g65 hxx p#xx q#xx r#xx或g65
hxx p#xx qxx
rxx格式輸入的,xx的意思就是數值,是以um級的量輸入的,比如你輸入100那就是0.1mm #xx就是變數號,變數號就是把數值代入到一個固定的地址中,固定的地址就是變數。
一般otd繫有#0~#100~#149~#500~#531.關閉電源時變數#100~#149被初始化成「空」,而變數#500~#531保持資料。我們如果說#100=30那麼現在#100地址內的資料就是30了。
b類巨集能完成某一功能的一系列指令像子程式那樣存入儲存器,使用者可以設定m、s、t、g**呼叫它們,使用時只需給出這個指令**就能執行其功能,也可以像呼叫子程式一樣使用。
句子在文章中的作用是什麼句子在文章中的作用
是包含內容和結構上的作用。句子在開頭的作用 引起下文 引出正文 引領下方 注意和 引起下文 不同 交待故事發生的背景 時間 地點 天氣環境等 為下文做鋪墊。設定懸念,吸引讀者,激發讀者的閱讀興趣。點明中心 又叫主旨 句子在文章中間的作用 承接上文。開啟下文。承上啟下。照應標題。照應開頭。句子在文章結...
c中的MFC是什麼意思vc中的mfc到底是什麼?
mfc是微來軟基礎類庫的簡稱,是微軟 源公司實現的一bai個c 類庫,主要封裝了大部分的duwindows api函式,zhivc 是微軟公司開發dao的c c 的整合開發環境,所謂整合開發環境,就是說利用它你可以編輯,編譯,除錯,而不是使用多種工具輪換操作,靈活性較大。有時人們說vc呢也指它的內部...
在VC6 0的MFC中,如何在對話方塊中實現開啟影象(BMP
我的bai duqq,zhi95101那個 dao,lpbits lpbitmap sizeof bitmapfileheader sizeof bitmapinfoheader if lpbackup delete lpbackup lpbackup new byte nlen memcpy lp...