#預處理器運算符的應用和需要考慮的問題是什么?正如我在前面的許多問題中提到的,我正在通過K&R進行工作,目前正在進行預處理。有一件更有趣的事情-我以前從任何一次嘗試學習C時都不知道-是##預處理操作符。根據K&R:預處理算子##提供在宏展開期間連接實際參數的方法。如果替換文本中的參數與##參數替換為實際參數,##周圍的空白被移除,結果被重新掃描。例如,宏paste連接它的兩個參數:#define paste(front, back) front ## back所以paste(name, 1)創建令牌name1.為什么會有人在現實世界里用這個?它的使用有哪些實際例子,是否有需要考慮的問題?
3 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
CrashRpt:使用#將宏多字節字符串轉換為Unicode
#define WIDEN2(x) L ## x#define WIDEN(x) WIDEN2(x)//Note you need a WIDEN2 so that __DATE__ will evaluate first.
std::wstring BuildDate = std::wstring(WIDEN(__DATE__)) + L" " + WIDEN(__TIME__);
L
__ DATE __
Windows:對通用Unicode或多字節字符串使用#
#ifdef _UNICODE #define _T(x) L ## x#else #define _T(x) x#endif
_T
用于清潔訪問器和修飾符名稱的各種庫:
#define MYLIB_ACCESSOR(name) (Get##name)#define MYLIB_MODIFIER(name) (Set##name)
各種庫,使用它同時進行多個變量聲明:
#define CREATE_3_VARS(name) name##1, name##2, name##3int CREATE_3_VARS(myInts);myInts1 = 13;myInts2 = 19;myInts3 = 77;
- 3 回答
- 0 關注
- 381 瀏覽
添加回答
舉報
0/150
提交
取消