當前位置:首頁 » 編程軟體 » 宏定義的編譯順序

宏定義的編譯順序

發布時間: 2024-05-22 02:15:38

c語言中「宏」是個什麼東西 有什麼意義

宏定義的作用在預編譯階段,形如 #define A B 就是宏定義了,作用就是在預編譯階段將程序中的A全部視為B,舉個例子:
我們在程序最開始,聲明如下宏定義
#define pi 3.1415926
那麼在我們寫程序的時候,我們可以直接使用pi作為一個常量來使用,那麼當我們編譯程序的時候,編譯器會自動將程序中出現的pi替換成3.1415926

第二個例子,利用宏定義定義傻瓜函數
#define mul(A,B) A*B
那麼我們可以將mul()在程序中當成函數來使用,為什麼叫做傻瓜函數一會來解釋,使用方法
mul(3,5) 那麼這段代碼就相當於計算3*5=15
那麼當我們如下使用時就會出現問題
mul(3+2,3) 我們期待的結果是15,而實際結果是9,為什麼呢?因為在程序會如下轉換
3+2*3=3+6=9 這也就是為什麼我們管宏定義出來的函數叫傻瓜函數的原因了~~~

樓主呀~~~完全手寫,一定要好評呀!^_^

⑵ 計算機編譯系統對宏定義在編譯時進行語法檢查這句話為什麼錯

第一步被換為area=a*b。
宏定義末尾不加分號,減少輸入錯誤和便於修改。宏替換在編譯前進行,不做表達式求解函數調用在編譯後程序運行時進行,只佔編譯時間。
除了一般的字元串替換,函數調用不會。
宏展開不佔運行時間,不分配內存。
宏的啞實結合不存在類型,作用域為其後的程序,還要做參數代換。
格式:數組大小常用宏定義。
預處理是在編譯之前的處理。
宏定義又稱為宏代換;
",利用宏則可以設法得到多個值。
宏展開使源程序變長。
函數只有一個返回值,預處理不做語法檢查。一切以換為前提,准確理解之前就「換」;宏"1;第一步換為area=r*r;
正確的宏定義是#define
S(r)
(r)*(r);
宏名和參數的括弧間不能有空格;
宏替換只作替換:
#define
宏名(參數表)
字元串;
例如、值傳遞:
#define
標識符
字元串;
其中的標識符就是所謂的符號常量,b)
a*b;
area=S(3:
(1)宏名一般用大寫;
(2)使用宏可提高程序的通用性和易讀性,也沒有類型轉換,第二步被換為area=3*2,而編譯工作的任務之一就是語法檢查:將宏名替換為字元串.帶參數的宏、做任何事情之前先要換,並且分配內存。
預處理(預編譯)工作也叫做宏展開;中永遠不包含宏。
(3)宏定義不分配內存;
(4)宏定義寫在函數的花括弧外邊;
,不做計算:
#define
PI
3,第二步被換為area=a+b*a+b:
(5)實參如果是表達式容易出問題:
#define
S(r)
r*r
area=S(a+b)。
即在對相關命令或語句的含義和功能作具體分析之前就要換;
類似於函數調用。
格式.1415926。
把程序中出現的PI全部換成3。
(6)可以用#undef命令終止宏定義的作用域。
(7)宏定義可以嵌套。
(8)字元串",變數定義分配內存,通常在文件的最開頭。1415926說明,也稱為「宏名」,簡稱「宏」、宏替換。

⑶ 璇﹁В瀹忓畾涔(#define)

璇﹁В瀹忓畾涔(#define)鐨勮В閲婂備笅錛

C璇璦涓鐢ㄥ埌瀹忓畾涔夌殑鍦版柟寰堝氾紝濡傚湪澶存枃浠朵腑涓轟簡闃叉㈠ご鏂囦歡琚閲嶅嶅寘鍚錛屽垯鐢ㄥ埌錛#ifndefcTest_Header_h#definecTest_Header_h//澶存枃浠跺唴瀹#endif鍦ㄦ垜浠甯哥敤鐨 stdio.h 澶存枃浠朵腑涔熷彲浠ヨ佸埌寰堝氬畯瀹氫箟錛屽傦細

#define BUFSIZ1024//緙撳啿鍖哄ぇ灝#define EOF(-1)//琛ㄦ枃浠舵湯灝#ifndef SEEK_SET#define SEEK_SET 0 //琛ㄧず鏂囦歡鎸囬拡浠庢枃浠剁殑寮澶村紑濮#endif#ifndef SEEK_CUR#define SEEK_CUR 1//琛ㄧず鏂囦歡鎸囬拡浠庣幇鍦ㄧ殑浣嶇疆寮濮#endif#ifndef SEEK_END#define SEEK_END 2//琛ㄧず鏂囦歡鎸囬拡浠庢枃浠剁殑鏈灝懼紑濮#endif

浠庡紑濮嬪啓C璇璦鍒扮敓鎴愭墽琛岀▼搴忕殑嫻佺▼澶ц嚧濡備笅錛堝戜笖蹇界暐棰勫勭悊涔嬪墠鐨勭紪璇戝櫒鐨勭炕璇戝勭悊嫻佺▼絳夛級錛屽湪榪涜岀紪璇戠殑絎涓嬈℃壂鎻忥紙璇嶆硶鎵鎻忓拰璇娉曞垎鏋愶級涔嬪墠錛屼細鏈夌敱棰勫勭悊紼嬪簭璐熻矗瀹屾垚鐨勯勫勭悊宸ヤ綔銆

棰勫勭悊宸ヤ綔鏄緋葷粺寮曠敤棰勫勭悊紼嬪簭瀵規簮紼嬪簭涓鐨勯勫勭悊閮ㄥ垎鍋氬勭悊錛岃岄勫勭悊閮ㄥ垎鏄鎸囦互鈥#鈥濆紑澶寸殑銆佹斁鍦ㄥ嚱鏁頒箣澶栫殑銆佷竴鑸鏀懼湪婧愭枃浠剁殑鍓嶉潰鐨勯勫勭悊鍛戒護錛屽傦細鍖呮嫭鍛戒護#include錛屽畯鍛戒護#define絳夛紝鍚堢悊鍦板埄鐢ㄩ勫勭悊鍔熻兘鍙浠ヤ嬌寰楃▼搴忔洿鍔犳柟渚垮湴闃呰匯佷慨鏀廣佺Щ妞嶃佽皟璇曠瓑錛屼篃鏈夊埄浜庢ā鍧楀寲紼嬪簭璁捐°傛湰鏂囦富瑕佷粙緇嶅畯瀹氫箟鐨勪互涓嬪嚑涓閮ㄥ垎錛

5銆佸彲鍙樺畯錛氣﹀拰__VA_ARGS__

鎴戜滑緇忓父瑕佽緭鍑虹粨鏋滄椂瑕佸氭′嬌鐢╬rinf(鈥溾︹,鈥)錛涘傛灉鐢ㄤ笂闈渚嬪瓙#defineSUM(a,b)printf(#a鈥+鈥#b鈥=%d 鈥,((a)+(b)))錛屽垯鏍煎紡姣旇緝鍥哄畾錛屼笉鑳界敤浜庤緭鍑哄叾浠栨牸寮忋傝繖鏃舵垜浠鍙浠ヨ冭檻鐢ㄥ彲鍙樺畯錛圴ariadicMacros錛夈傜敤娉曟槸錛

#define PR(...)printf(__VA_ARGS__)//瀹忓畾涔塒R("hello ")錛//瀹忚皟鐢//杈撳嚭緇撴灉錛歨ello

鍦ㄥ畯瀹氫箟涓錛屽艦鍙傚垪琛ㄧ殑鏈鍚庝竴涓鍙傛暟涓虹渷鐣ュ彿鈥溾︹濓紝鑰屸淿_VA_ARGS__鈥濆氨鍙浠ヨ鐢ㄥ湪鏇挎崲鏂囨湰涓錛屾潵琛ㄧず鐪佺暐鍙封溾︹濅唬琛ㄤ簡浠涔堛傝屼笂闈渚嬪瓙瀹忎唬鎹涔嬪悗涓猴細printf(鈥渉ello 鈥);

榪樻湁涓渚嬪瓙濡傦細

#define PR2(X,...)printf("Message"#X":"__VA_ARGS__)//瀹忓畾涔塪oublemsg=0;PR2(1,"msg=%.2f ",msg)錛//瀹忚皟鐢//杈撳嚭緇撴灉錛歁essage1:msg=10.00

鍦ㄥ畯璋冪敤涓錛孹鐨勫間負10錛屾墍浠#X琚鏇挎崲涓衡1鈥濄傚畯浠f崲鍚庝負錛歱rintf("Message""1"":""msg=%.2f ",msg)錛涙帴鐫榪4涓瀛楃︿覆榪炴帴鎴愪竴涓錛歱rintf("Message1:msg=%.2f ",msg)錛涜佹敞鎰忕殑鏄錛氱渷鐣ュ彿鈥溾︹濆彧鑳界敤鏉ユ浛鎹㈠畯鐨勫艦鍙傚垪琛ㄤ腑鏈鍚庝竴涓錛

⑷ C語言編譯系統對宏替換的處理是在什麼時候進行的

是正式工作開始之前的准備工作,所以宏替換是在對程序編譯之前進行的。

宏替換是C/C++的預處理中的一部分,對於宏定義中的形參,在替換列表中,如果不是作為#或##的操作數,那麼將對應實參完全展開(相當於對實參進行求值),然後將替換列表中的形參替換掉,如果是#或##的操作數。

(4)宏定義的編譯順序擴展閱讀:

宏的用途在於自動化頻繁使用的序列或者是獲得一種更強大的抽象能力。

計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。

宏的行為如同是函數對自身程序文本的變形,並且可以應用全部語言來表達這種變形。一個C宏可以定義一段語法的替換,然而一個Lisp的宏卻可以控制一節代碼的計算。

⑸ 在C語言中 宏定義是什麼

宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。

宏定義又稱為宏代換、宏替換,簡稱「宏」。

(5)宏定義的編譯順序擴展閱讀:

宏(Macro),是一種批量處理的稱謂。計算機科學里的宏是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式。

解釋器或編譯器在遇到宏時會自動進行這一模式替換。對於編譯語言,宏展開在編譯時發生,進行宏展開的工具常被稱為宏展開器。

宏這一術語也常常被用於許多類似的環境中,它們是源自宏展開的概念,這包括鍵盤宏和宏語言。絕大多數情況下,「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。

C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSIC,作為C語言最初的標准。

目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。

C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。

其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、TurboC等。

參考資料:

宏定義-網路

C語言-網路

熱點內容
哈爾演算法 發布:2024-11-08 14:36:27 瀏覽:844
內置緩存指 發布:2024-11-08 14:34:31 瀏覽:717
同步cm12源碼 發布:2024-11-08 14:34:21 瀏覽:717
悠悠解壓 發布:2024-11-08 14:06:54 瀏覽:372
低頻訪問存儲 發布:2024-11-08 14:05:31 瀏覽:680
html5坦克大戰源碼 發布:2024-11-08 14:04:35 瀏覽:407
輸錯密碼鎖定什麼意思 發布:2024-11-08 14:02:07 瀏覽:542
存儲計算邏輯 發布:2024-11-08 13:49:35 瀏覽:544
java演算法排序演算法 發布:2024-11-08 13:42:20 瀏覽:884
u盤隨身系統linux 發布:2024-11-08 13:34:34 瀏覽:412