我想知道c語言裡面怎麼區分函式與巨集

時間 2022-04-13 15:07:11

1樓:匿名使用者

一眼看去巨集的名稱一般是全大寫字母加下劃線,再去定義的地方檢視,巨集定義有#define 函式更明顯

2樓:蕭竣閏

很簡單,巨集定義都有#

函式都有返回型別,比如void,int,等

c 語言 中 巨集和函式的區別

3樓:路過只是巧合

#define a 10

#define max(a,b) a>b?a:b

max(a,b)

c語言中帶引數的巨集定義與函式的區別(試舉例)

4樓:匿名使用者

如果合理的使用巨集,會提高**的質量,而且巨集用起來感覺也是很方便的

5樓:魔鬼魚

巨集只是字元的替換,在預處理階段就給替換到**中去了比如下面的**

#include

#define max(x, y) ((x)>(y)?(x):y())

int main()

如果你用的是gcc編譯器,執行 gcc -e main.c -o main.i,開啟main.

i檔案就可以看到他是如何替換進去的,直接拖到最後,前面的都是stdio.h中的內容。

int main()

函式就不同了,函式還需要分配棧空間,在執行函式時都要進行入棧和出棧操作,有的還需要分配堆空間。

巨集所實現的功能有限,而且長**不易讀,但是對於邏輯簡單、**不長、經常使用的功能由巨集來實現是個不錯的選擇

6樓:匿名使用者

#define max(a,b) (a>b ? a : b)//這是巨集

int max(int a, int b)//這是函式

c語言與巨集指令有什麼關係?

7樓:匿名使用者

c語言裡面可以用巨集定義

都一樣了,就像你申明乙個變數一樣簡單.

8樓:平凡人生

#define m(巨集定義名) 2*3(表示式)

相當於用m替代後面的表示式

9樓:匿名使用者

c語言是高階語言。

巨集指令是組合語言程式中的一種偽指令。

最終它們都是編譯成cpu能夠識別的二進位制指令。

10樓:

巨集指令是在預編譯時解釋

而c語言是在編譯時解釋

11樓:自然之風祥

程式的整體編譯過程為:預處理、編譯、優化、彙編、連線。巨集指令主要用到的死#define,#ifdef,#endif等,預處理就是處理這些指令

c語言中巨集函式跟自定義的函式有什麼區別?

12樓:天蠍神經俠侶

巨集函式是預定義的,在用的時候方面快捷,有效率;在某種程度上來說,巨集函式和自定義函式是有區別的,但作為乙個函式的本身來說,沒有實質性的區別。

13樓:匿名使用者

可以把巨集理解成拼字遊戲,它功能很強大,但是強大到使用不好就會有***。c++有很多語言設施用來完全特定功能的巨集,如const,inline,template,就是為了讓大家少用巨集。給你舉個巨集和函式不同的例子**:

#define max(x,y) ((x)>(y)?(x):(y))template

inline t max(t x,t y)看起來似乎是相同的功能,可是函式呼叫,畢竟會求完每乙個實參的值,再傳遞給被調函式,即使宣告了inline,在呼叫點而不發生實際的呼叫開銷。

但是你試試用這個呼叫巨集,結果就會有問題:

int i=4,j=5;

int k=max(i++,j++);

如果是函式呼叫,i==5,j==6,k==5。如果是巨集的話,結果是:

int k=((i++)>(j++)?(i++):(j++));

你覺得會一樣嗎?所以,慎用巨集。

mfc中有很多功能是巨集完成的,它太強大了,很多情況下有巨集很高效,但是不容易控制。

14樓:

巨集定義是代換,簡單的函式與巨集定義並沒有什麼區別但你想想

比如乙個函式要實現這樣乙個功能:如果x>y,那麼求x+y,如果x

這種在計算之前要經過判斷的函式,你就不能用巨集定義了把?

15樓:

巨集函式如果沒有函式原型,哪麼它沒有函式堆疊也沒有形式引數,實際上只是caller的一部分

.如果有函式原型,如下

---------------

#define fun1(param1,param2) \dowhile(0)

---------------

這樣的巨集是有函式原型的,它和函式沒有區別

16樓:匿名使用者

巨集定義是方便修改程式的一種方法,在程式的開頭定義某種定量,在以下的程式中就可以隨時的方便修改。

17樓:我註冊總行了吧

/*比如

乙個函式要實現這樣乙個功能:如果x>y,那麼求x+y,如果xb)?x+y:((a

。。。。。。

18樓:匿名使用者

巨集函式是預定義的,比自定義的函式更有效率,如果你的自定義函式短小,並且為inline的,那麼也沒有什麼實質的區別!

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

19樓:仁昌居士

c語言bai中的巨集

定義用du法分為兩種。

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

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

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

2)。

20樓:天雲一號

巨集定義的格式如下:

#define  識別符號  字串

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

舉例如下:

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

void main()

21樓:匿名使用者

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

參考**

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

22樓:匿名使用者

#define 巨集名稱 定值

c語言,巨集定義,與函式的差別 我覺得巨集定義和函式沒什麼差別啊, 是否可以用巨集定義代替函式

23樓:

不同。雖然功能近似,但函式會產生獨立**,每次呼叫執行的是同乙個位置的**,無論呼叫多少次。

巨集定義是簡單的文字替換,產生的**是替換後程式產生的**,簡單說就是程式裡每次使用巨集替換後的地方都要產生類似的**,而這些替換後產生的**存在於程式的不同位置。

巨集定義不檢查引數型別,僅僅是簡單的文字替換

24樓:來自海印寺芳香襲人 的啄木鳥

首先巨集定義和函式是有差別的

巨集定義是在編譯之前處理的,不做語法檢查。 這個很危險另外我要說

#define a(b,c)

表示bc之合,在結果上和函式確實一樣

25樓:匿名使用者

但是當函式複雜的情況下,你就沒法代替了哦!

26樓:匿名使用者

#define a(x,y) x>y?x*y:x+y和int a(x,y)

a(x+y,x*y)這個表示式對於以上兩種定義的得到的結果是不一樣的而且,巨集有巨集的有點,函式有函式的優點

函式的優點就是占用儲存空間少,缺點是每次呼叫函式都要呼叫中斷程式,影響執行效率

巨集的優點就是直接巨集,每次呼叫都要,所以比較佔儲存空間,但是相應的就不用呼叫中斷程式了,執行效率自然就高了

我想知道c語言盡可能多的標頭檔案以及每個頭的作用

標頭檔案並不能代表什麼。主要要學習函式,及函式在那個標頭檔案中定義。但c的函式實在太多了,此外,各種c編譯器中c的函式也有所不同。c c 標頭檔案一覽 c 傳統 c include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入...

我想知道,在愛情裡面什麼才算是公平

正確理解愛吧 愛 主要是看你怎麼去對待它了,平平淡淡的愛才是真,在愛上乙個人的時候,就不要去計較愛情的浪漫和很多種的愛情方式,這個每個人的去愛的方式不同,不要不知足,太貪心了,會失去難得的真愛,有人說愛情是不會長久的,我認為是錯誤的,愛情有長久的時候,因為你沒有做到保護真愛的時候,才會導致愛情是短暫...

我想知道dota裡面有哪些物品效果衝突

法球和法球是不能疊加的。法球和攻擊特效是能疊加的。吸血鬼的祭品是近戰的吸血效果,但不是法球所以能和 散失 支配 暗滅 瘋狂 這些法球效果疊加。遠端出祭品沒用。冰眼 近戰屬於 法球 遠端屬於 特效所以遠端能出 支配 任意乙個法球 和 冰眼。攻擊特效有 大炮 毒球 攻擊特效之間不能疊加,所以只能出乙個。...

我現在已經學了C C組合語言程式設計,我想知道我現在需要怎麼補充自己的知識??謝謝

大學學的c c 都是最基本的語法,想做軟體 還需要學stl。如果你要做遊戲,還要學directx,不過這些對於學過c 的人來說都是很簡單的事情了。如果想往高處走,數學就別丟了。大學所學的 網路技術,計算機組成原理,這些原理性的東西都是為你以後更高階鋪路的。當然資料庫也很重要。哇塞 學過這麼多種語言 ...

我想知道這裡面神話組合被翻唱的幾首在哪找阿

歌曲 美麗的神話。歌手 孫楠 韓紅 忘不了你。夢中的人熟悉的臉孔。你是我守候的溫柔。就算淚水淹沒天地。我不會放手,每一刻孤獨的承受。只因我曾許下承諾。你我之間熟悉的感動。愛就要甦醒。萬世滄桑唯有愛是永遠的神話。潮起潮落始終不悔真愛的相約。幾番若痛的糾纏多少黑夜掐扎。緊握雙手讓我和你再也不離分。枕上雪...