巨集函式相較於內聯函式是否毫無優勢?

時間 2021-05-29 23:47:19

1樓:傳統的幻想書屋

巨集可以用作強制內聯,要知道現在的inline已經變成乙個對於要求函式內聯來說有沒有都沒關係的關鍵字了,因為不管你寫不寫,編譯器都有權決定你這個函式要不要inline,但是巨集卻可以保證inline,像有的記憶體很小的平台,就經常這麼幹。

當然對於c++來說,能不用就不用,畢竟巨集沒有任何安全保障,但是有時候確實必須要用。

不過內聯這塊,如果不是特殊平台的話,建議還是相信編譯器,不該內聯的函式內聯了,不一定就有利。

2樓:stay

並不是,而且正確來說應該叫仿函式巨集,當年就寫了這樣的巨集(類似的,具體名字記不住了)

#define __TEXT(code) ##code#define _TEXT(code) __TEXT(code)然後一堆流程跳轉函式引數啥的就可以不用直接寫字串常量了,直接巨集展開#define EMPTY_PAR ""

#define START 0

#define RUN 1

#define END 2

struct

流程表_t

流程表=

,// 展開結果為"0"

,// 選擇跑步或結束

,// 展開結果為"1"

,// 跑完了

,// 展開結果為"2"

,// 結束返回開始,};

還有那些反射相關的巨集,比較常見就不列舉了,凡是涉及到轉字串的,不用巨集基本上是做不到的

C 內聯函式和constexpr函式可以在程式中定義不止一次,這個一般用在什麼時候?

楊個毛 用來讓你製造一堆weak symbol,然後一不小心試圖把兩個不同libstdc 版本的.o檔案鏈結在一起的時候死得不明不白的。 Pluto Hades 你們為什麼搞這麼複雜?inline關鍵字是在宣告的時候用的,不是在定義的時候寫。題主你把inline和函式體挪到頭檔案再試一次。另外,C ...

如何拒絕編譯器將函式內聯處理

悽臨雨 題目描述裡居然是講跨單元編譯 非成員函式extern inline就完事了,那樣本地呼叫會inline,外部呼叫會呼叫副本。MSVC 成員函式 declspec noinline inline聯合使用,其中inline會使此函式體可以存在於標頭檔案中不會重複定義,noinline可以使具體呼...

建構函式不能是虛函式

ylq 建構函式不是不能是虛函式,而是完全沒意義。c 在編譯期間就能確定你要建立的物件的具體型別,而這個具體型別包含了什麼,繼承了什麼在編譯期間也是明確的,所以要構造什麼也都是明確的,根本沒必要存在虛建構函式。虛函式的存在是因為編譯期間沒法確定具體呼叫物件,才會有虛函式,虛函式表這麼個東西。 雞賊軒...