基础知识 | 每日一面(59)
- 2020 年 4 月 2 日
- 筆記

古代的剑客们与
对手相逢时,无
论对手多么强大,
明知不敌,也要亮出自己的剑!
读者:怎么写一个一般用途的宏交换两个值?
小林:对于这个问题没有什么好的答案。如果这两个值是整数, 可以使用异或的技术, 但是这对浮点值或指针却不行, 对同一个值也无能为力。如果希望这个宏用于任何类型 (通常的目标), 那么它不能使用临时变量,
因为不知道需要什么类型的临时变量, 而且标准C也没有提供 typeof 操作符。
读者:书写多语句宏的最好方法是什么?
小林:通常的目标是书写一个象包含一个单独的函数调用语句的宏。这意味着 “调用者” 需要提供最终的分号, 而宏体则不需要。因此宏体不能为简单的括弧包围的复合语句, 因为如果这样, 调用的时候就会发生语法错 (明显是一个单独语句, 但却多了一个额外的分号), 就像在 if/else 语句的 if 分支中多了一个 else 分句一样。
有时候,正是那些意想不到之人,成就了无人能成之事。
——图灵