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

2021-03-27 11:55:33 字數 5475 閱讀 9707

1樓:匿名使用者

巨集定義的

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

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

2樓:匿名使用者

「巨集」,就是大的意思,c語言中的巨集,是一種可以代表任何語言元素的識別符號。

這裡還有一個概念,就是巨集定義,例如:#define a b+c巨集定義出現在c語言的源**中,在正式編譯前,編譯器會進行預處理,而預處理過程包括一個很重要的任務(當然還有其它任務),就是替換巨集,這種替換是一種機械的替換,並不考慮識別符號的語法,語義,也就是說當遇到上面的a時,會直接替換成b+c。

還有一種更加靈活的巨集,是帶引數的巨集,例如:#define f(a,b) (a)+(b)

替換時會根據引入引數,這樣,f(1,2)會被替換成(1)+(2)。

3樓:匿名使用者

巨集就是 用一個宣告去定義一樣變數或者函式 就比如 你為你的朋友起個花名 你以後就可以用花名替代他原來的名字

在c語言中「巨集是什麼意思」

4樓:馬化騰

定義的意思

在c語言中的巨集定義就是定義外部變數 內部函式使用exiterm來呼叫如:exiterm char c1,c2;

c語言中的巨集定義的字是:define

c語言中的define巨集定義有帶引數的和不帶引數兩中形式不帶參格式是:#define 巨集名 字串帶參格式是:#define 巨集名(引數1,引數2,...

) 字串在c語言裡巨集定義只用來做的巨集名替換,而不做語法檢查的,因而它不是c語句,所以在巨集定義的時候不需要在後面加";"

巨集也在c裡也叫預處理命令,因為巨集是在程式編譯前先進行字元替換的,所以叫預處理.在c裡還有其它的預處理命令如:

#define

#undef

#ifdef等等

5樓:匿名使用者

巨集就是一種等價替換,把**原封不動的替換到**裡,注意符號優先順序

6樓:匿名使用者

巨集就是常量

應該有巨集觀的意思,因為它們都是全域性常量

7樓:賓若谷苟緞

簡單來說:巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。是c提供的三種預處理功能的其中一種。

說明:1、巨集名一般用大寫

2、使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義

3、預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。

4、巨集定義末尾不加分號;

5、巨集定義寫在函式的花括號外邊,作用域為其後的程式,通常在檔案的最開頭。

6、可以用#undef命令終止巨集定義的作用域

7、巨集定義可以巢狀

8、字串"

"中永遠不包含巨集

9、巨集定義不分配記憶體,變數定義分配記憶體。

在c語言中"巨集"是什麼意思?

8樓:楊塵一

簡單來說:巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。是c提供的三種預處理功能的其中一種。

說明:1、巨集名一般用大寫

2、使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義

3、預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。

4、巨集定義末尾不加分號;

5、巨集定義寫在函式的花括號外邊,作用域為其後的程式,通常在檔案的最開頭。

6、可以用#undef命令終止巨集定義的作用域

7、巨集定義可以巢狀

8、字串" "中永遠不包含巨集

9、巨集定義不分配記憶體,變數定義分配記憶體。

9樓:萌萌

定義的意思,在c語言中的巨集定義就是定義外部變數,內部函式使用exiterm來呼叫

如:exiterm char c1,c2;

c語言中的巨集定義的字是:definec語言中的define巨集定義有帶引數的和不帶引數兩中形式,不帶參格式是:#define 巨集名,字串帶參格式是:

#define 巨集名(引數1,引數2,...) 字串在c語言裡巨集定義只用來做的巨集名替換,而不做語法檢查的,因而它不是c語句,所以在巨集定義的時候不需要在後面加";"巨集也在c裡也叫預處理命令,因為巨集是在程式編譯前先進行字元替換的,所以叫預處理.在c裡還有其它的預處理命令如:

#define

#undef

#ifdef等。

c語言中的巨集定義有什麼用?

10樓:風林火陰山雷

您好!很高興為您解答。

巨集定義的用處主要體現在便於程式的除錯上。

比如我要寫一個計算圓相關資訊(周長、面積等等)的程式,需要定義π(3.14):

#define pi 3.14

那麼勢必pi這個標識可以在程式中代替所有的3.14,如果我發現計算的精度不夠,需要π的更多有效位時,則只需將巨集定義修改為:

#define pi 3.1415926

那麼程式中的所有pi都會變成3.1415926

可想而知,沒有巨集定義,我需要將**中全部的3.14都手動改為3.1415926

即使是定義double pi=3.14;,你會發現當**很長時,在亂軍叢中找到一行「double pi=3.14;」是多麼困難的事。

又比如陣列,定義時是不能出現「int a[n];」這樣的定義的,編譯通不過,因為必須規定陣列長度。

但如果是:

#define n 10

int a[n];

就可以,對巨集定義編譯器是不作檢查的,應為巨集定義只是簡單的符號替換。所以一旦我還沒有確定要定義多長的陣列,但又想通過編譯時,就可以提現巨集定義的用處了。

如此看來,巨集定義提升了程式編寫的靈活性。

望採納~如您還有不解,歡迎追問~

11樓:綠波菜

在這個題中是看不出什麼好處 for (int i=0; i以用 10 代替,因為題目簡單 但是如果比較複雜的 如二位陣列啊a[m][n] 中可能一個 for (int i=0; i

m n 巨集定義,就不需再用具體數值代替 這樣 程式的可讀性就好很多,你要知道,程式設計師編好程式 也會有人幫他複查的,如果你都用數值代替 ,一旦**很複雜了你自己看的明白,別人就不知所云了,當然還有一些好處 如 當遇到較長數值時 用一個字母代替 有簡化作用等。

12樓:匿名使用者

①重用性高:比如你定義一個函式a裡有個陣列a[10],其他地方用到了函式a但是陣列大小為100,若是用了巨集定義就不用一個個改了,直接把函式複製過去#define n 10改為#define n 100即可

②不易出錯:用到很多的某一資料時很管用如#define π 3.1415916

13樓:閒來無事

編譯的時候替換成10

c語言中的「巨集」是指什麼?

14樓:加百列

巨集是一種預處理指令,它提供了一種機制,可以用來替換源**中的字串。

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)巨集定義不存在型別問題,它的引數也是無型別的。

這個C語言巨集是什麼意思,在C語言中「巨集是什麼意思」

巨集就是用於預編譯的,沒實質內容的東西,只是為了自己好看 方便閱讀之類。只是完整的替代。或者方便 移植之類。你這裡的data應該是你對應環境的一個偽指令 功能 指令用於將一個內部ram 的地址賦給指定的符號名指令格式 符號名 data 表示式 數值表示式的值應在0 255 之間,表示式必須是一個簡單...

這個是個什麼東西有什麼用,這是個什麼東西來了?有什麼用?怎麼用?

看樣子像是紅外感應,提醒有無人走動的。這個是熱釋電紅外感測器。用於防盜系統。這是個什麼東西來了?有什麼用?怎麼用?這應該是聲控吧?這是個什麼東西?有什麼用 你要說下,或者給個圖,不然我這啥都沒有啊 這是 量角器 li ng ji o q 量角器,畫圖用具,常見材質為塑料或鐵質,可以根據需要畫出所要的...

c語言中x是什麼意思c語言中x0是什麼意思

x是16進位制輸出 8x是輸出8位 x是帶格式輸出,效果為在輸出前加0x.所以 這裡就是以16進位制輸出y值,並在前面加0x字首,如果輸出小於8位,那麼實際輸出8位,左側補空格.比如 y 0x20那麼會輸出 y 0x20 如果y 0x12345678 那麼會輸出 y 0x12345678 x a等價...