【发布时间】:2017-12-06 14:31:07
【问题描述】:
在一些 C 程序中(例如 gecko),我注意到一个习惯用法,即程序会临时定义一个宏,然后包含一个使用该宏的文件,然后取消定义该宏。这是一个简单的例子:
speak.c:
#define SPEAK(phrase) (printf("When I speak I say %s\n", (phrase)))
#include "dog.h"
#undef SPEAK
狗.h:
SPEAK("woof");
扩展为:
(printf("When I speak I say %s\n", ("woof")))
我认为这可能是一种有用的技术,可以通过指定扩展站点的行为来概括包含的代码。
此模式是否有名称,或者以前是否曾写过?
【问题讨论】:
-
以非编译代码为例,很奇怪,语句后面没有
;(()中的语句对我来说意义不大)。 -
这与X macro 概念接近/相同。
-
@OliverCharlesworth IMO 该评论值得回答!
标签: c macros c-preprocessor