巨集(macro)和行內函數(inline function)的區別

巨集是一段程式碼,它是前處理器指令。行內函數是C++增強功能,以最小化程式的執行時間。因此,巨集和行內函數的關鍵區別在於,巨集由前處理器檢查,而行內函數由編譯器檢查。...

關鍵區別–宏與內聯函數

宏是一段代碼,它是預處理器指令。內聯函數是C++增強功能,以最小化程序的執行時間。因此,宏和內聯函數的關鍵區別在於,宏由預處理器檢查,而內聯函數由編譯器檢查。

宏包含在程序的開頭,前面有一個哈希符號。當程序中有宏名稱時,它將被宏的內容替換。

目錄

1. 概述和主要區別
2. 什麼是宏
3. 什麼是內聯函數
4. 並排比較-表格形式的宏與內聯函數
5. 摘要

什麼是宏(macro)?

預處理器是在源代碼通過編譯器之前對其進行處理的程序。它使用預處理器命令行或指令進行操作。在程序中,預處理器指令放在主程序之前的源程序中。在源代碼通過編譯器之前,它由預處理器檢查預處理器指令。預處理器指令具有#符號。與其他語句不同,它們不以分號結尾。預處理器指令的一種類型是宏。一般來說,宏是用大寫字母寫的。

宏(macro)和內聯函數(inline function)的區別

圖01:帶有宏的C++程序

根據上面的程序,第3行和第4行表示宏。計算面積時,使用定義的宏替換PI值。在第14行volume=CUBE(value)中,預處理器將語句展開為volume=(value*value*value)。找到立方體可以寫成函數,但在這裡它是用宏寫的。如果有一個語句volume=CUBE(x+y),那麼它將擴展為volume=(x+y*x+y*x+y)。

一些編程標記很容易鍵入錯誤。可以使用宏替換它們。e、 g.#定義和&,#定義或| |。宏定義還可以包含表達式,例如#define AREA 4*5.56。

什麼是內聯函數(inline function)?

當一個函數被調用時,編譯器需要一些時間來執行它。如果函數不是很複雜,程序員可以將函數轉換為內聯函數。參考以下程序。

宏(macro)和內聯函數(inline function)的區別

圖02:沒有內聯的函數

print_hello是一個簡單的函數。它在調用函數時打印字符串“Hello”。該函數的執行時間為0.187s,使用inline關鍵字如下,執行時間減少到0.064s。

宏(macro)和內聯函數(inline function)的區別

圖03:內聯函數

因此,通過使用inline關鍵字,可以減少執行時間。如果存在循環、switch語句以及函數包含靜態變量或遞歸函數,則內聯函數可能無法工作。

宏(macro)和內聯函數(inline function)的區別

宏與內聯函數
宏是一段代碼,它是一個預處理器指令,包含在程序的開頭,前面有一個哈希符號。 內聯函數是C++增強功能,以最小化程序的執行時間。
評估時間
在宏中,每次在程序中使用參數時都會對其求值。 在inline中,參數被計算一次。
審核人
預處理器檢查宏。 編譯器檢查內聯函數。
關鍵字
馬可用“定義”。 inline函數使用關鍵字“inline”。
使用
宏可用於定義常量、表達式、文本替換和函數定義等。 內聯函數可用於最小化程序的執行時間。
終止
宏以新行結束。 內聯函數以內聯函數結尾處的大括號結束。
定義點
在程序開始時定義一個Marco。 內聯函數可以在類的內部或外部。

總結 - 宏(macro) vs. 內聯函數(inline function)

本文討論了宏和內聯函數之間的區別。C++編程中使用了這些概念。宏和內聯函數的區別在於,宏由預處理器檢查,而內聯函數由編譯器檢查。

引用
  • 發表於 2020-10-19 00:27
  • 閱讀 ( 43 )
  • 分類:科技

你可能感興趣的文章

巨集(macro)和微生境(micro habitat)的區別

...述和主要區別 2. 什麼是大棲息地 3. 什麼是微型棲息地 4. 巨集觀和微觀棲息地的相似性 5. 並列比較-表格形式的巨集觀和微觀棲息地 6. 摘要 什麼是大型棲息地(a macro habitat)? 大生境是一個比較大的環境,有足夠的範圍。事實上...

  • 發佈於 2020-09-27 13:59
  • 閲讀 ( 52 )

函式式程式設計(functional programming)和命令式程式設計(imperative programming)的區別

...格形式的指令式程式設計 6.摘要 什麼是函式式程式設計(functional programming)? 函式式程式設計是以數學為基礎的。函數語言程式設計背後的關鍵原則是,所有的計算都被看作是獨立數學函式的組合。數學函式將輸入對映到輸出。...

  • 發佈於 2020-10-19 02:12
  • 閲讀 ( 49 )

塊(block)和內聯元素(inline elements)的區別

...元素用作HTML中的容器。 塊(block)和內聯元素(inline elements)的區別 塊與內聯元素 塊元素是將跨越父元素的整個寬度的元素,並且不允許任何其他元素在放置時佔用相同的水平空間。 內聯元素是不能直接放置在body元素...

  • 發佈於 2020-10-19 13:55
  • 閲讀 ( 54 )

功能原型(function prototype)和c語言中的函式定義(function definition in c)的區別

...函式定義的表格形式 6. 摘要 什麼是c語言中的函式原型(function prototype in c)? 函式原型提供函式宣告。它指定函式的名稱、返回型別、引數。返回型別是從函式返回的資料型別。當函式返回整數時,返回型別為int;當函式返回floa...

  • 發佈於 2020-10-19 16:08
  • 閲讀 ( 74 )

功能主義(functionalism)和行為主義(behaviorism)的區別

...派的同時,考察兩個學派之間的差異。 什麼是功能主義(functionali**)? 功能主義是由威廉·詹姆斯、約翰·杜威、哈維·卡爾和約翰·安吉爾首創的。功能主義作為一個學派,主要關注人的心理過程的功能。因此,功能主義的主題...

  • 發佈於 2020-10-21 05:42
  • 閲讀 ( 57 )

功能性(functional)和非功能需求(non functional requirements)的區別

...能需求與非功能需求的表格形式 5. 摘要 什麼是功能要求(functional requirements)? 指定軟體功能方面的需求稱為功能需求。功能需求從一個專案變更到另一個專案。它們定義了系統或元件提供的功能。 圖01:軟體開發 假設一個醫院...

  • 發佈於 2020-10-22 19:56
  • 閲讀 ( 45 )

狀態函式(state function)和路徑函式(path function)的區別

狀態函式(state function)和路徑函式(path function)的區別 熱力學是物理化學的一個重要分支,它揭示了不同形式的能量和功之間的熱化學關係。有四個熱力學定律用於描述熱力學系統的行為。狀態函式和路徑函式是表示系統不同熱...

  • 發佈於 2020-10-24 02:43
  • 閲讀 ( 55 )

微型的(micro)和巨集觀社會學(macro sociology)的區別

微觀社會學與巨集觀社會學 微觀社會學和巨集觀社會學都是社會學的主要研究點,但微觀社會學與巨集觀社會學有何區別?微觀社會學以小規模研究為基礎,研究人類行為和人類社會互動的本質。另一方面,巨集觀社會學在...

  • 發佈於 2020-10-24 17:49
  • 閲讀 ( 48 )

功能主義(functionalism)和衝突理論(conflict theory)的區別

功能主義(functionali**)和衝突理論(conflict theory)的區別 功能主義和衝突理論是社會學的兩個視角,兩者之間存在著一定的差異。社會學是研究人類社會和社會群體行為的社會科學。在社會學中,人們用多種視角來理解人類社會...

  • 發佈於 2020-10-28 22:42
  • 閲讀 ( 56 )

結構主義(structuralism)和功能主義(functionalism)的區別

...,更具哲理性。 人類學有自己的結構。 什麼是功能主義(functionali**)? 另一方面,功能主義是基於這樣一個理念:社會的每一個要素都有其自身的功能,正是每一個要素的相互依存才有助於社會秩序和社會穩定。例如,以一個社...

  • 發佈於 2020-10-29 11:08
  • 閲讀 ( 68 )