0
A
回答
1
#define PASTE(a,b) a##b
int foo;
foo PASTE(+,=) 2;
我見過的唯一一次這是有用是一個字節碼解釋器,這往往看起來像一個巨大的case語句非常重複的代碼在每個臂的內循環:
case OP_add: {
if (sp < 2) goto underflow;
double x = stack[--sp];
stack[sp-1] += x;
} break;
對每個支持的二進制算術運算符重複。隨着能力令牌粘貼,就可以從宏中生成所有這些:
#define ARITH_BINOP(name, oper) case OP_##name: { \
if (sp < 2) goto underflow; \
double x = stack[--sp]; \
stack[sp-1] oper##= x; \
} break /* deliberate absence of semicolon */
,然後,在開關,你可以只寫
ARITH_BINOP(add, +);
ARITH_BINOP(sub, -);
ARITH_BINOP(mul, *);
/* etc */
0
我認爲,文件說,大約樣病例:
#define COMPST(x, y) x ## y
int
foo(int x)
{
return x COMPST(+, =) 2;
}
0
當然宏可以執行任何你可以在C代碼實現:
#define INCREMENT(x) ((x) += 1)
main() {
int n=42;
INCREMENT(n);
}
你讀的這行意味着另一件我懷疑你不感興趣的東西......
相關問題
- 1. C++複合賦值乘以
- 2. 修復宏以結合連續值
- 3. 複合賦值運算符可以短路
- 4. 混合賦值和複合賦值運算符 - 優先級?
- 5. 使用字符串賦值和複合賦值是否安全?
- 6. java複合賦值運算符和賦值運算符
- 7. 可以賦值爲空嗎?
- 8. 宏 - 複合式
- 9. C#中的複合賦值^ =原子嗎?
- 10. 超載複合賦值運算符
- 11. 複合賦值運算符重載
- 12. Javascript中的複合賦值導致NaN
- 13. 解決複合賦值表達式
- 14. 您可以使用NH3執行復雜的聚合操作嗎?
- 15. 在VB.NET條件下執行賦值?
- 16. Makefile變量賦值提前執行
- 17. 是否可以在bash中的命令之前執行數組賦值?
- 18. SAS宏執行
- 19. 是否可以將變量賦值與條件測試混合?
- 20. 是否有可能在PHP返回語句中執行賦值?
- 21. 向量複製然後賦值可以提高性能
- 22. 左值賦值太複雜
- 23. 如何在另一個宏中反覆執行sas宏?
- 24. 僅執行奇數值的宏
- 25. 宏賦值在SQL Server通過
- 26. HDF5可以執行「值映射」嗎?
- 27. C++引用可以賦值嗎?
- 28. C++取消引用賦值是否執行按位或「智能」賦值?
- 29. EXCEL-宏以條件方式合併基於單元值的行
- 30. 並行可變賦值在F#