C語言中的巨集定義如何使用,c語言巨集定義如何用?用巨集定義有什麼優點?

時間 2022-02-01 20:39:02

1樓:

正確的完整輸出 3 個整數的程式結構應該按照如下寫法:

#define n 3

#include

int main( )

;for(i = 0 ; i < n ; i ++ ) /* 迴圈輸出整數陣列 a 中的 3 個數字,特別要注意:i 必須要寫成:i < n,而不能夠寫成:

i <= n,否則的話,就會產生越界錯誤。 */

printf("%d\t", a[i] ) ;

printf("\n" );

return 0 ;

}由於 c 語言的陣列下標是從 0 開始的,而不是像 pascal 語言那樣是從 1 開始的。故

你原來的程式語句中:

#define n 3

printf("%d", a[n]) ; 用 n = 3 替換 a[n],就變成了:printf("%d", a[3]) ; 那就肯定越界了。

2樓:

陣列下標從0開始,a[n]要改成a[n-1],否則下標越界了。

3樓:鎝籌紬錛

printf這一行末尾的;改一下, 不要使用中文輸入法.

4樓:風林火陰山雷

您好!很高興為您解答。

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

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

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

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

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

c語言巨集定義如何用?用巨集定義有什麼優點?

5樓:匿名使用者

主要用於函式重定義,通用性,可以用一個變數符號替代另一個變數符號格式:#define m(x,y) x+y在主程式裡寫入z=m(6,9);等價於z=6+9;而寫成z=(6-8,9);等價於z=6-8+9 ;直接代入

還有就是 :#define uint unsigned int 即用 uint 代替unsigned int 便於書寫,還有就是不同作業系統的通用變數識別

6樓:匿名使用者

用#define 來定義,如#define max 100

優點:在以後的程式中 要修改max的大小 不用跑到程式中找 直接修改

#define max 的大小即可。很方便。

7樓:匿名使用者

自己去**找呀!!!!

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

8樓:仁昌居士

c語言bai中的巨集

定義用du法分為兩種。

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

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

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

2)。

9樓:天雲一號

巨集定義的格式如下:

#define  識別符號  字串

其中,#表示這是一條預處理命令;內#define為巨集容定義命令;「識別符號」為巨集定義的巨集名;「字串」可以上常數、表示式、格式串等。

舉例如下:

#define pi 3.14   // 對3.14進行巨集定義,巨集名為pi

void main()

10樓:匿名使用者

在想對特定的內容定義的時候用

參考**

有問版題請追問 滿意記得權採納

11樓:匿名使用者

#define 巨集名稱 定值

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

12樓:風林火陰山雷

您好!很高興為您解答。

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

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

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

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

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

13樓:綠波菜

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

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

14樓:匿名使用者

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

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

15樓:匿名使用者

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

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

16樓:閒來無事

編譯的時候替換成10

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

17樓:雪人晒太陽

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

18樓:仁昌居士

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

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

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

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

2)。

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

19樓:蜻蜓點水

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

比如define a (a+b)

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

20樓:

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

c語言中的巨集定義如何在組合語言中實現啊,請大俠賜教!

21樓:匿名使用者

想要理解巨集定義先理解巨集替換。巨集替換就是巨集名字在編譯的時候被定義的部分替換的過程。這樣你就可以在一個地方定義,多處都可以使用了,但是和變數不同,巨集只是被替換。

延遲函式 sleep(毫秒數) 需要包含 windows.h。

22樓:

巨集名 macro

……巨集體

……endm

23樓:

pi equ #3.1415926d

c語言巨集定義函式如何呼叫(裡面含引數可以當函式用嗎)

24樓:魔方格的故事

使用巨集函式或者巨集函式時,注意如下幾點:

1.巨集函式的引數沒有型別,前處理器只負責做形式上的替換,而不做引數型別檢查,所以傳參時要格外小心。

2.巨集函式定義要注意格式,尤其是括號。

如果上面的巨集函式寫成 #define max(a, b) (a>b?a:b),省去內層括號,則巨集就成了k = (i&0x0f>j&0x0f?

i&0x0f:j&0x0f),運算的優先順序就錯了。同樣道理,這個巨集定義的外層括號也是不能省的。

若函式中是巨集替換為 ++max(a,b),則巨集就成了 ++(a)>(b)?(a):(b),運算優先順序也是錯了。

3.巨集函式往往會導致較低的**執行效率。

若是普通函式,則通過遞迴,可取的最大值,時間複雜度為o(n)。但若是巨集函式,則巨集為( a[n]>max(n-1)?a[n]:

max(n-1) ),其中max(n-1)被呼叫了兩遍,這樣依此遞迴下去,時間複雜度會很高。

25樓:匿名使用者

巨集定義,不能當函式使(函式中的return是返回到呼叫點,而巨集中的return卻是從呼叫點跑開了)

你的**,在編譯時會進行巨集替換,真正的**變成了如下:

#include

//#define a(b,c)

int main()

//本身這句也有問題,return後跟的printf()永遠不會執行!

return 0;}

C語言多次賦值問題,C語言中使用巨集定義多次賦值的問題

項成郟卯 a正確顯然,b正確n2 n3直接截斷小數部分返回一個整數,c正確,賦值語句是左優先順序的,這個語句先把j賦給i,再把i賦給k,d是不正確的,和c類似,不過第一次賦值,b c 1,賦值語句的左側是變數,不能是一個表示式, 鍾全婁卯 如果要達到原來的效果,就不可能寫成後面的形式。s a i a...

c語言的巨集定義能不能修改,C語言中怎樣修改巨集定義呢

你定義了。在程式中是不能改變的。只能在定義的地方修改。程式在預處理期間進行值替換。 德眾 比如巨集定義在一開頭定義 define n 10,那麼接下來所有的n都是10,巨集定義一旦定下除非你修改 否則都無法修改巨集定義 成都中公優就業 巨集定義在程式內是不可改變的,只能在定義的地方只能在定義的地方修...

c語言中巨集替換的替換規則,C語言中,巨集替換的替換規則

焉秋梵正 簡單來說 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 巨集替換是c c 的預處理中的一部分,在c 標準中有4條規則來定義替換。規則1 實參替換。本條規則描述帶引數的巨集的替換過程。對於巨集定義中的形參,在替換列表中,如果不是作為 或 的運算元,那麼將對應實參完全 相當於對實參進行求值 然...