『壹』 c語言關於宏定義、函數
宏定義的基礎知識。引用宏定義時,直接代入進行代換。
既然已經宏定義SUB(a) (a)-(a),而程序中出現的對應a的是a+b,那麼就將a換為a+b代入表達式:
d=SUB(a+b)*c=(a+b)-(a+b)*c=(2+3)-(2+3)*5
直接用(a+b)-(a+b)代換SUB(a+b)。這一點和數學是不同的,不要強行往數學上靠。
『貳』 請問一下,c語言中若用define簡單宏定義一個函數,如下,#define power(x) x*x,為何不用指出x的類型
這個問題要首先弄明白這段話在編譯的時候編譯器是怎麼處理的。其實宏定義在編譯時只是按照定義格式把使用宏的代碼替換掉,就比如你上面那句:cout<<power(2)<<<endl;在編譯時,編譯器自動把這句替換為:cout<<2*2<<endl;也就是說這只是一種「文本」替換!!可以說參數類型與你傳入的參數x的類型一致。
宏不像函數,雖然方便,但宏替換有較大的風險。比如第二句:cout<<power(1+1)<<endl;按理來說你可能想要計算的是(1+1)*(1+1)但事實上由於編譯器只執行文本替換,結果第二句被替換為:1+1 * 1+1,結果迥然不同。當然你也可以注意括弧應用或運算符優先順序。
另外談到宏不得不提C++的內聯函數,一般函數調用時都是將其壓棧待其返回值再繼續運行,這個過程中需要保護斷點、壓棧、運算、恢復斷點...(匯編會講到)等等,一系列操作,而這些操作都需要消耗一定的時間,跟函數順序執行相比消耗更多,因此在C++中引入了內聯函數的概念。它很像宏,也是把所有調用內聯函數的部分替換,但他不是簡單的文本替換,他同普通函數一樣要執行參數檢查等等操作。
『叄』 c語言宏定義如何用用宏定義有什麼優點
用#define 來定義,如#define Max 100
優點:在以後的程序中 要修改Max的大小 不用跑到程序中找 直接修改
#define Max 的大小即可。很方便。
『肆』 C語言中的宏定義怎麼用
C語言中的宏定義用法分為兩種。
1、不帶參數的宏定義比較簡單,就是用一個指定的標識符來代表一個字元串。它的一般形式為「#define 標識符 字元串」,例如#define E 2.718281828459。這種方法使用戶能以一個簡單的名字代替一個長的字元串。
2、帶參數的宏定義不是僅僅進行簡單的字元串替換,還要進行參數替換。其定義的一般形式為;「#define 標識符(宏名)(參數表) 字元串」,字元串中包含在括弧中所指定的參數。例如#define S(a,b) a*b area=S(3. 2)。
(4)c語言用宏定義一組函數擴展閱讀:
宏定義只佔編譯時間,函數調用則佔用運行時間(分配單元,保存現場,值傳遞,返回),每次執行都要載入,所以執行相對宏定義會較慢。
使用宏定義次數多時,宏定義展開後源程序很長,因為每展開一次都使程序增長,但是執行起來比較快一點(這也不是絕對的,當有很多宏定義展開,目標文件很大,執行的時候運行時系統換頁頻繁,效率就會低下)。而函數調用不使源程序變長。
『伍』 宏定義一個函數有什麼用,#define DEBUG_DELAY() C語言編程
的確是沒有可被替換的東西,實際上替換的是「空」,也就是什麼都沒有。程序裡面調用這個就沒有任何作用。也許原本這個#define
DEBUG_DELAY()
後面還有一個函數,然後某個程序員不希望這個這個宏被調用的所有位置起作用,就刪去了。所以這個宏就替換空。
這個函數宏後面為「空」或非「空」,語法都對。
『陸』 c語言問題(宏定義作為函數)
不是你那樣用的
#include<stdio.h>
#include<string.h>
#defineN(type,x,y)typetype##_max(typex,typey){return(x>y?x:y);}
N(int,x,y);//用宏產生一個int_max函數
voidmain()
{
inti=2,j=4;
printf("%d ",int_max(i,j));
}
『柒』 C語言中的宏定義有什麼用
您好!很高興為您解答。
宏定義的用處主要體現在便於程序的調試上。
比如我要寫一個計算圓相關信息(周長、面積等等)的程序,需要定義π(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];
就可以,對宏定義編譯器是不作檢查的,應為宏定義只是簡單的符號替換。所以一旦我還沒有確定要定義多長的數組,但又想通過編譯時,就可以提現宏定義的用處了。
如此看來,宏定義提升了程序編寫的靈活性。
望採納~如您還有不解,歡迎追問~