導航:首頁 > 源碼編譯 > 編譯宏的作用

編譯宏的作用

發布時間:2023-03-24 07:20:02

⑴ 在C++中#define的作用是什麼

作用:

在C或C++語言中,「宏」分為有參數和無參數兩種。

被定義為「宏」的標識符稱為「宏名」。在編譯預處理時,對程序中所有出現的「宏名」,都用宏定義中的字元串去代換,這稱為「宏代換」或「宏展開」。宏定義是由源程序中的宏定義命令完成的。宏代換是由預處理程序自動完成的。

宏定義的作用范圍僅限於當前文件,即帆派file1.c中定義#definePI3.14,在file2.c中該宏定義不起作用;通過將#definePI3.14

定義在common.h中,file1.c和file2.c分別#include"common.h"的方式,該宏定義在file1.皮轎螞c和file2.c中都起作用。

(1)編譯宏的作用擴展閱讀

無參宏定義

無參宏定義的一般形式為:#define 標識符 字元串

其中的「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令。「define」為宏定義命令。「標識符」為所定義的宏名。「字元串」可以是常數、表達式、格式串等。

例如:

#define M (a+b)它的作用是指定標識符M來代替表達式(a+b)。在編寫源程序時,所有的(a+b)都可由M代替,而對源程序作編譯時,將先由預處理程序進行宏代換,即用(a+b)表達式去燃埋置換所有的宏名M,然後再進行編譯。

程序1:

#include<stdio.h>

#define M (a+b)

int main(void)

{

int s,a,b;

printf("inputnumbera&b:");

scanf("%d%d",&a,&b);

s = M*M;

printf("s=%d ",s);

}

上常式序中首先進行宏定義,定義M來替代表達式(a+b),在 s= M * M 中作了宏調用。在預處理時經宏展開後該語句變為: S=(a+b)*(a+b) 但要注意的是,在宏定義中表達式(a+b)兩邊的括弧不能少。否則會發生錯誤。

如當作以下定義後:#define M (a)+(b) 在宏展開時將得到下述語句:S= (a)+(b)*(a)+(b)

對於宏定義還要說明以下幾點:

1、宏定義是用宏名來表示一個字元串,在宏展開時又以該字元串取代宏名,這只是一種簡單的代換,字元串中可以含任何字元,可以是常數,也可以是表達式,預處理程序對它不作任何檢查。如有錯誤,只能在編譯已被宏展開後的源程序時發現。

2、宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。

3、宏定義其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。(有關#undef 請查閱其它資料)

⑵ c++裡面的宏是什麼意思,請懂得的指點一下

非常簡單的理解: 宏就是用來告訴編譯器如何編譯的一些指令.

例如:
#define DEFABC 0x0001

其實沒什麼不好理解的森敗,當編譯器編譯到#define DEFABC 0x0001這里的時候把它記了下來,然後繼續往下編譯,以此指顫後編譯的時候如果碰到了DEFABC,就把DEFABC這個宏名替換成0x0001常量,說白了也就是起到了替換逗嫌作用記住宏就是文本替換

⑶ 在C語言中「宏是什麼意思」

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

宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義不可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
(10)宏定義不存在類型問題,它的參數也是無類型的。

⑷ C語言宏定義

樓主看看書,仔細看看編譯預處理都做了哪些事情。

程序設計語言的預處理的概念:在編譯之前進行的處理。 C語言的預處理主要有三個方面的內容: 1.宏定義; 2.文件包含; 3.條件編譯。 預處理命令以符號「#」開頭。

宏定義又稱為宏代換、宏替換,簡稱「宏」。預處理製作單純的宏展開,並不是檢查語法錯誤,所說義是錯誤的。

語法錯誤都是編譯階段才檢查的。預處理是不檢查的。

⑸ 急(C語言)比較帶參的宏與帶參的函數之間的區別

區別:
1、宏會在編譯器在對源代碼進行編譯的時候進行簡單替換,不會進行任何邏輯檢測,即簡單正世代碼復制而已。
2、宏進行定義時不會考慮參數的舉伍肢類型。
3、參數宏的使用會使具有同一作用的代碼塊在目標文件中存在多個副本,即會增長目標文件的大小。
4、參數宏的運行速度會比函數快,因為不需要參數壓棧/出棧操作。
5、參數宏在定義時要多加小心,多加括弧。
6、函數只在目標文件中存在一處,比較節省程序空間。
7、函數的調用會牽扯到參數的傳遞,壓棧/出棧操作,速度相對較慢。
8、函數的參數存在橘賣傳值和傳地址(指針)的問題,參數宏不存在。

⑹ c語言中的「宏」是指什麼

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

「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。
計算機語言如C語言或 匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。

在Objective-C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,被定義為宏的標識符稱為宏名。在編譯預處理時,對程序中所有出現的宏名,都用宏定義中的字元串去替換,這稱為宏替換或宏展開。

宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。在Objective-C語言中,宏分為有參數和無參數兩種。

(6)編譯宏的作用擴展閱讀

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語言中「宏」是個什麼東西 有什麼意義

宏定義的作用在預編譯階段,形如 #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 這也就是為什麼我們管宏定義出來的函數叫傻瓜函數的原因了~~~

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

⑻ 請問EXCEL中的宏是什麼,有什麼用,和函數有什麼關系嗎

計算機科學里的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。Excel 辦公軟體自動集成了「VBA」高級程序語言,用此語言編制出的程序就叫「宏」。使用「VBA」需要有一定的編程基礎和耗費大量的時間,因此,絕大多數的使用者僅使用了Excel的一般製表功能,很少使用到「VBA」。
解釋器或編譯器在遇到宏時會自動進行這一模式替換。對於編譯語言,宏展開在編譯時發生,進行宏展開的工具常被稱為宏展開器。神悉戚宏這一術語也常常被用於許多類似的環境中,它們是源自宏展開的概念,這包括鍵盤宏和宏語言。絕大多數情況下,使用「宏」這個詞的使用暗示著將小命令或動作轉化為陸讓一系列指令。
宏的用途在於自動化頻繁使用的序列或者是獲得一種更強大的抽象能力--但這常常是一回事。
計算機語言如C或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C 程序員可游陵以獲得更精巧的宏。
Lisp類語言如Common Lisp和Scheme有更精巧的宏系統: 宏的行為如同是函數對自身程序文本的變形,並且可以應用全部語言來表達這種變形。一個C宏可以定義一段語法的替換,然而一個Lisp的宏卻可以控制一節代碼的計算。
獲得了控制代碼的執行順序(見惰性計算和非限制函數)的能力,使得新創建的語法結構與語言內建的語法結構不可區分。例如,一種Lisp 方言有 cond 而沒有if ,就可以使用宏由前者定義後者。Lisp 語法的去部主要擴展,比如面向對象的CLOS 系統,可以由宏來定義。

⑼ 「C語言的宏定義」是什麼

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

是段喊C提供的三種預處理功能的其中一種。

⑽ 請問C語言中帶參數的宏和函數的比較

宏是用於編譯器處理的,他在程序編譯時,會在對應位置展開成代碼。。,這就相當於你在告訴編譯器,我想在這個位置加一些代碼,代碼的內容已在宏中定義,請編譯器自己支找。。。,也就是說程序在運行時,升李早已變成了正並對應位置上的代碼,此時已沒有宏的概念了。。。。
而函數則是運行時,調用。他不會在編譯時,在對應位置上加上函數代舉笑跡碼,只是加上一個函數入口指針。。。從這個入口去運行一段代碼。。。運行完了之後回到當前位置繼續執行。。。。
可以簡單的認為,宏是在編譯時上起作用,而函數是運行時起作用。。。

閱讀全文

與編譯宏的作用相關的資料

熱點內容
回明綠帽篇 瀏覽:85
大賣pdf 瀏覽:298
伺服器主流是什麼 瀏覽:971
日本電影一個男人帶著女朋友撿到一袋錢 瀏覽:211
盲人賣花女 然後賺錢治好她的眼睛的電影吳孟達 瀏覽:683
編譯程序有哪些用 瀏覽:945
變身之後我與她的狂想曲txt 瀏覽:843
睡在我上下前後左右鋪的兄弟閱讀 瀏覽:531
搜編程課程入口 瀏覽:226
韓國拍的朝鮮戰爭電影有哪些 瀏覽:262
裕泉影視台灣電影 瀏覽:35
安卓怎麼激活電源 瀏覽:519
推油類電影 瀏覽:112
好的看片網站 瀏覽:982
人吃人食人族電影全集 瀏覽:729
0855最新網址 瀏覽:4
浪潮伺服器如何安裝raid1 瀏覽:757
exe程序反向編譯工具 瀏覽:470
亞瑟的電影叫什麼名字 瀏覽:826
javaimport找不到 瀏覽:730