巨集函式和普通函式的區別
#define S(a,b) a*b
area=S(3,2)
int S(int a,int b)
{ int s;
s=a*b;
return(s);
}
這兩個有什麼區別
為了提高程式的效率,我們用define來定義一個函式,這樣在頻繁呼叫的時候就不會有函式呼叫的開銷了,這就是巨集函式,但巨集定義只是把S(a,b)簡單地替換成a*b,這樣會產生問題,最典型的兩種:
1.缺括號,比如aera=S(x+y,x-y),會被替換成x+y*x-y
2.自增運算子
定義巨集
#define S(a) (a)*(a)
結果S(a++),變成(a++)*(a++)這個大家都知道,在不同編譯環境下會有不同結果。
也就是說,巨集只是編譯前簡單替換程式碼內容,而函式真正產生程式碼。
巨集是編譯期的,函式是執行期的;
巨集不是實體,而函式是一個可定址的實體;
巨集只是編譯期替換,在程式裡每遇到S(a,b),就用a*b代替,a和b兩個實體並沒有由巨集實際產生,而函式S會在棧中定義兩個物件a和b。
巨集沒有生存期、作用域之類的概念,而函式就有。
函式在執行過程中會在棧中產生函式呼叫過程活動記錄,而巨集則沒有。
相關推薦
巨集函式和普通函式的區別
#define S(a,b) a*b area=S(3,2) int S(int a,int b) { int s; s=a*b; return(s); } 這兩個有什麼區別 為了提高程式的效率,我們用define來定義一個函式,這樣在頻繁呼叫的時候就不會有函式呼叫的開銷了,這就是巨集函式,但巨
函式式的巨集定義和普通函式的區別
去華為面試,被問到了這個問題,答了其中一條,面試官很不滿意,回來總結下! 函式式的巨集定義: #define MAX(a,b) ((
C語言中static修飾的函式和普通函式的區別
用static修飾的函式,本限定在本原始碼檔案中,不能被本原始碼檔案以外的程式碼檔案呼叫。而普通的函式,預設是extern的,也就是說,可以被其它程式碼檔案呼叫該函式。 在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。普通 函式的定義和宣告預設情況下是extern的,但靜
箭頭函式和普通函式有什麼區別
1.箭頭函式相當於匿名函式,是不能作為建構函式的,不能使用new 2.箭頭函式不繫結arguments,取而代之用rest引數…解決 3.箭頭函式會捕獲其所在上下文的this值,作為自己的this值。即箭頭函式的作用域會繼承自外圍的作用域。 4.箭頭函式當方法使用的時候沒有定
ES6中的箭頭函式和普通函式有什麼區別?
1、普通函式中的this總是指向呼叫它的那個物件, 箭頭函式沒有自己的this,他的this永遠指向其定義環境,任何方法都改變不了其指向,如call()、bind()、apply()。(正是因為它沒有this,所以也就不能用作建構函式,也沒有原型物件) 2、箭頭函式不能當作建構函
箭頭函式和普通函式的區別,this的指向問題
1.箭頭函式作為匿名函式,不能作為建構函式,不能使用new var B = ()=>{ value:1; } var b = new B(); //TypeError: B is not a constructor 2.箭頭函式不繫結argumen
JS中建構函式和普通函式有什麼區別
//建立函式 function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=function(){ alert(this.name);
匿名函式,閉包 匿名函式和普通函式的區別 什麼是閉包?閉包的優缺點?
小程式 function 同時也支援以下的語法(匿名函式(變數裡有函式),閉包(函式裡有函式)等): var a = function (x) { return function () { return x;} } var b = a(100); console.log( 100 === b() )
static全域性變數和普通全域性變數區別?static區域性變數和普通區域性變數區別?static函式和普通函式區別
幾者的區別從三個方面考慮: 1初始化時間 2 作用域 3 分配記憶體空間 static全域性變數和普通全域性變數區別: 區別: 1.static全域性變數編譯是初始化,在main()函式之前初始化並且僅初始化一次; 2.static全域
詳解箭頭函式和普通函式的區別以及箭頭函式的注意事項、不適用場景
箭頭函式是ES6的API,相信很多人都知道,因為其語法上相對於普通函式更簡潔,深受大家的喜愛。就是這種我們日常開發中一直在使用的A
關於建構函式和普通函式的思考
建構函式的特點: 1.使用方法: new fn(); 2.建構函式會建立一個新的物件。 3.建構函式中的this指向的例項化的這個物件 4.返回值預設為物件 5.採用大駝峰式命名規則 普通函式的特點: 1.使用方法: fn(); 2
什麼是虛擬函式,虛擬函式和普通函式有何不同,帶有虛擬函式的類什麼時候都可以例項化嗎?
程式碼或者內容有任何問題,請留言相告,不勝感激!!!!! 什麼是虛指標? 虛指標又叫虛擬函式指標是一個虛擬函式的實現細節,帶有虛擬函式的類中每一個物件都有一個虛指標指向該類的虛擬函式表 虛擬函式的入口地址和普通函式的入口地址有什麼不同? 每個虛擬函式都在虛表中佔有一個表項
C/C++之巨集、行內函數和普通函式的區別
轉載:https://www.cnblogs.com/ht-927/p/4726570.html C/C++之巨集、行內函數和普通函式的區別 行內函數的執行過程與帶引數巨集定義很相似,但引數的處理不同。帶引數的巨集定義並不對引數進行運算,而是直接替換;行內函數首先是函式,這就意味著函式的很多
普通函式和建構函式的區別
普通函式和建構函式的區別 在命名規則上,建構函式一般是首字母大寫,普通函式遵照小駝峰式命名法。 在函式呼叫的時候: function fn() { } 建構函式:1. new fn( )
JS中建構函式與普通函式的區別及JS建構函式、原型和例項的關係
JS中建構函式與普通函式的區別: https://www.cnblogs.com/cindy79/p/7245566.html JS建構函式、原型和例項的關係: https://blog.csdn.net/u012443286/article/details/78823955 Java
巨集函式與普通函式的區別
我們由問題展開: 1.什麼是巨集函式? 2.巨集函式與普通函式的相同點?不同點? 3.巨集函式與普通函式的優缺點? 什麼是巨集函式? 在這之前看一下巨集的定義: 巨集 巨集是根據一系列預定義的規則替換一定的文字模式。 #define
普通函式和箭頭函式在事件中的作用域,使用不使用閉包的區別
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>22-01 高階技巧</title> <
JavaScript中普通函式和建構函式有什麼區別?
1 命名規則 建構函式名首字母一般大寫,普通函式名首字母一般小寫 2 呼叫規則 通過new操作符呼叫的則是建構函式,否則是普通函式 例: //建立函式 function Fun(par
巨集定義函式與普通函式的區別
#define MAX(a,b) ((a)>(b)?(a):(b)) int MAX1(int a,int b) { return a>b?a:b; } 1)巨集定義函式沒有引數型別也不做
C語言中static 函式除了不能再外部被呼叫外和普通函式還有什麼區別呢?
iThinks:本文來自CSDN論壇的討論,觀點不一定全對,但值得從這幾個方面考察static。 C程式一直由下列部分組成: 1)正文段——CPU執行的機器指令部分;一個程式只有一個副本;只讀,防止程式由於意外事故而修改自身指令; 2)初始化資料段