C語言的巨集定義是什麼,在C語言中巨集定義是什麼?

2021-03-19 18:19:29 字數 6840 閱讀 6508

1樓:留名在世射手

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

是c提供的三種預處理功能的其中一種。

1、巨集名一般用大寫。

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

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

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

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

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

7、巨集定義可以巢狀。

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

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

2樓:漫承依月桃

定義一個字串來代表一個數字,或者一個表示式例如:#define

pi3.1415926

#define

s(x+y*z)

在c語言中 巨集定義是什麼?

3樓:雪人晒太陽

在c語言源程式中,允許用一個識別符號來表示一個字串,稱為巨集,巨集定義是由源程式中的巨集定義命令完成的,巨集替換是由預處理程式自動完成的。巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括:巨集定義、檔案包含、條件編譯。

4樓:blackpink_羅捷

巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括:巨集定義、檔案包含、條件編譯。

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

格式:#define 識別符號 字串

其中的識別符號就是所謂的符號常量,也稱為「巨集名」。

預處理(預編譯)工作也叫做巨集:將巨集名替換為字串。

掌握"巨集"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,準確理解之前就要「換」。

擴充套件資料

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

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言制定了一套完整的美國國家標準語法,稱為ansi c,作為c語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。

c語言是一門程序導向的計算機程式語言,與c++,java等物件導向的程式語言有所不同。

其編譯器主要有clang、gcc、win-tc、sublime、msvc、turbo c等。

5樓:仁昌居士

c語言中的巨集定義用法分為兩種。

1、不帶引數的巨集定義比較簡單,就是用一個指定的識別符號來代表一個字串。它的一般形式為「#define 識別符號 字串」,例如#define e 2.718281828459。

這種方法使使用者能以一個簡單的名字代替一個長的字串。

2、帶引數的巨集定義不是僅僅進行簡單的字串替換,還要進行引數替換。其定義的一般形式為;「#define 識別符號(巨集名)(參數列) 字串」,字串中包含在括號中所指定的引數。例如#define s(a,b) a*b area=s(3.

2)。

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

6樓:風林火陰山雷

您好!很高興為您解答。

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

比如我要寫一個計算圓相關資訊(周長、面積等等)的程式,需要定義π(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];

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

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

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

7樓:綠波菜

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

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

8樓:匿名使用者

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

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

9樓:匿名使用者

首先解釋一下巨集定義的作用,巨集定義是在編譯的時候替換掉。具體到這個程式中就是所有出現n的地方都用10來替換,lz會覺得為什麼不直接寫10呢?對吧,當時我也有這樣的疑問。

這個程式比較小,所以體現不出來,試想當程式**上萬行的時候,如果因為開發的需要這個10需要換成8,那麼只需要在巨集定義處的10改成8就行了,如果當時沒有巨集定義,那不知要一個一個的改到什麼時候,估計lz是新手,不懂可以追問

10樓:閒來無事

編譯的時候替換成10

c語言中什麼是巨集定義,它是幹什麼的?

11樓:蜻蜓點水

就是強制性的字元替換,比如說你要用a代表6,那麼後面所有是a的地方都是用字元6替換掉就可以了,這個是不進行運算只是替換

比如define a (a+b)

那麼後面所有a的地方都可以全部替換成(a+b)但是你不能用a+b的結果

12樓:

巨集定義又稱為預定義,它有很多功能,我也剛剛瞭解一點。首先他能定義常量,這樣我們可以集中統一修改。其次,它還能定義函式(預定義)。總之,熟悉它會很方便。

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

13樓:楊塵一

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

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

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

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

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

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

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

7、巨集定義可以巢狀

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

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

14樓:萌萌

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

如:exiterm char c1,c2;

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

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

#define

#undef

#ifdef等。

c語言巨集定義意思?

15樓:千鋒教育

巨集定義是c語言提供的三種預處理功能的其中一種,這三種預處理包括:巨集定義、檔案包含、條件編譯。

巨集定義又稱為巨集代換、巨集替換,簡稱"巨集"。

格式:#define 識別符號 字串

其中的識別符號就是所謂的符號常量,也稱為"巨集名"。

預處理(預編譯)工作也叫做巨集:將巨集名替換為字串。

掌握"巨集"概念的關鍵是"換"。一切以換為前提、做任何事情之前先要換,準確理解之前就要"換"。

即在對相關命令或語句的含義和功能作具體分析之前就要換。

16樓:匿名使用者

我繼續回答你的追問:

這個 if 由於後面緊跟了;所以什麼也不會做,只是把exp執行了一遍,而後面的exse我覺得可能是筆誤,應該是else,那麼這個巨集的意思其實就是,當exp結果為非0(即false)時,那麼執行assertion_failure,後面的引數#exp,誠如前面的解答是exp的字元化,而_file_ _base_file_ _line_也都是巨集,是在c或c++基本庫檔案中定義好的,分別當前檔名,主程式檔名和該行**的行數

最後友情提醒下,巨集定義尤其是涉及邏輯**的,最好放在dowhile(0)裡面,這樣可以保證其在大多數條件下都可以正常的執行

17樓:金色潛鳥

行末的反斜槓,表示續行符,也就是說下一行於本行應連成一行閱讀。

這句定義 後面語句中 所有的

assert(exp)

用if (exp);

exse assertion_failure(#exp, _file_, _base_file_, _line_)

替代。其中 exp 是 表示式。

#exp 是 「字串化」 的 exp. ( 例如,當 exp 是 xyz 時,#exp 是 "xyz").

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

18樓:加百列

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

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語言中 巨集 是什麼意思?

c的巨集可以用來替換常數,替換表示式,仔細把這個程式看完你就明白了,include int main 程式輸入4 輸出25 比如 define max a,b a b a b 格式 define巨集名 參數列 字串 例如 define s a,b a b area s 3,2 第一步被換為area ...

c語言中什麼是原型定義,C語言中函式的定義格式是什麼,函式原型宣告的語法格式?

我還直是不知道呢,我說說自己的理解吧,一個函式,可能在別外被引用或是在本檔案中但是要先引用了而後面才有函式定義,此時編譯器需要先行知道這個函式返回型別和引數類形,才可以正確的幫著做嚴格的資料型別和引數個數的檢查 如不提前申明就會當做是返回int 型,引數都當int型且不能檢查引數個數 這個函式在定義...

c語言中定義有元素的整型陣列,C語言中,定義一個有100個元素的整型陣列inta100,然後用迴圈產生100個隨機數求大神幫助

include include int main 注意,編譯文 du件字尾必zhi須是.c檔案。希望採dao納 c語言如何srand和rand函式產生10個1 100內的隨機數 需要準備的材料分別有 電腦 c語言 編譯器。1 首先,開啟c語言編譯器,新建一個初回始.cpp檔案,例如答 test.cp...