c++ 你如何創建一個帶有可變參數列表的僅調試函數? 像printf()

c++ 你如何創建一個帶有可變參數列表的僅調試函數? 像printf()

我想使用與printf相同的參數進行調試日誌記錄功能。 但是可以在優化版本中被預處理器刪除。 例如: Debug_Print("Warning: value %d>3!\n", value); 我已經看過可變宏,但是這些在所有平台上都不可用。 gcc支持他們, msvc不。…


c++ 這個宏可以轉換成一個函數嗎?

在重構代碼並消除我們現在被教導討厭的所有那些#define的同時,我碰到了用來計算結構中元素數目的美:#define STRUCTSIZE(s)(sizeof(s)/sizeof(*s)) 它非常有用,但可以轉換為內聯函數或模板嗎? 好的,ARRAYSIZE會是一個更好的名字,但這是遺留的代碼(不知道它來自哪裡,至少15歲),所以我貼“它”。…


做一個C標識符和一個字符串?

假設你想生成一個匹配的標識符和字符串列表 enum{NAME_ONE, NAME_TWO, NAME_THREE}; myFunction(NAME_ONE, "NAME_ONE"); myFunction(NAME_TWO, "NAME_TWO"); myFunction(NAME_THREE, "NAME_THREE");..不用重複自己,也不用自動生成代碼,使用C/C+…



c++ #ifdef和#if-作為啟用/禁用編譯特定代碼段的方法,哪個更好/更安全?

這可能是一個風格問題,但我們的開發團隊存在一些分歧,我想知道是否有其他人對此有任何想法...... 基本上,我們有一些調試打印語句,我們在正常開發過程中關閉。 我個人更喜歡做以下事情://---- SomeSourceFile.cpp----#define DEBUG_ENABLED(0)... SomeFunction(){int someVariable=5…


c++ C預處理器可以用來判斷一個文件是否存在?

我有一個非常大的代碼庫(閱讀:成千上萬的模塊),這些代碼在眾多的項目中共享代碼,這些代碼可以在不同的操作系統上運行,使用不同的C++編譯器。 不用說,維護構建過程可能相當麻煩。 如果文件不存在於當前文件夾中,只有有一種方法可以使預處理器忽略某些#includes那麼在代碼庫中有幾個地方會清除代碼。 有沒有人知道一個方法來實現呢? 目前,我們在共享文件中的#include周圍使用#ifdef…


我如何使一個C++宏的行為像一個函數?

假設出於某種原因,您需要編寫一個宏: MACRO(X,Y) 。(讓我們假設你有一個很好的理由,你不能使用內聯函數。)你希望這個宏模擬一個沒有返回值的函數的調用。 示例1:這應該按預期工作。 if(x>y) MACRO(x, y); do_something(); 例2:這不應該導致編譯器錯誤。 if(x>y) MACRO(x, y); else MACRO(y-x…


c #實踐中的未定義?

我想知道C中#undef的實際用法。我正在通過K&R工作,而且是預處理器。 其中大部分內容都是我理解的(或多或少),但是第90頁(第二版)中的一些內容突出了我: 名字可以用#undef來定義,通常是為了確保一個例程真的是一個函數,而不是一個宏:#undef getchar int getchar(void){...}這是一種常見的做法來防禦某人#define與您的函數名稱相同…


在C(或可能是C++)中使用X-Macros的模式有什麼好的參考文檔?

在C預處理器上的維基百科條目中給出了“ X-Macros ”的基本定義和示例以及一些參考: 一個X宏是一個頭文件(通常使用“.def”擴展名而不是傳統的“.h”),它包含一個類似的宏調用(可以稱為“組件宏”)的列表。 如何使用這個強大的技術有什麼好的信息來源? 有沒有使用這種方法的知名開源庫?…


c++ 如何知道(在GCC)宏/預處理器符號獲取聲明?

假設我在各種頭文件中有#define foo。 它可能擴展到一些不同的東西。 我想知道(當編譯一個.cc文件)遇到#define時,它將展開,它是哪個文件,它包含從哪裡。 可能嗎? 如果沒有,是否有任何部分解決方案可以幫助? 隨意添加意見和澄清請求。 編輯:目前的答案似乎集中在有一個#define的情況下,我只是想跳轉到定義或知道定義是什麼。 這是簡單的情況,是的,你的解決方案工作。 但是…


宏定義的良好編程實踐(#define)在C中

例如,永遠不要像這樣定義一個宏:#define DANGER 60+2 當我們做這樣的操作時,這可能是危險的: int wrong_value=DANGER*2;// Expecting 124 相反,像這樣定義是因為你不知道宏的用戶如何使用它:#define HARMLESS(60+2) 這個例子是微不足道的,但是這很好的解釋了我的問題。 編寫宏時,您會推薦哪些準則或…




preprocessor macro function directive中文 directive command中文 connect concatenation gcc define