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