宏定义中的空#代表什么意思?

13

我有如下宏:

#define F(Args, ...) \
   // macro definition
#
   F(()) // looks like usage?
#undef F
仅包含 # 的那一行是什么意思?F(()) 是否是宏的用法?

仅包含 # 的那一行是什么意思?F(()) 是否是宏的用法?

1个回答

19

从技术上讲,这并不是宏的一部分(没有续行符在此之前)。 这是一个指令,在#define指令之后。

单独一行的#被称为空指示符,它什么也不做(与注释一样)。

虽然在现代C语言中已经没有实际用途(除了作为视觉标记),但在史前时期的C语言中,预处理器只有在以指令开始的C源文件中才会被调用,而在C文件的最开始放置一个空指示符是确保该文件被预处理(即后续的指令能够工作)而不必以具体指令开头的好方法。


我想它可以用来进一步混淆代码。 - Stack Danny
@StackDanny 是的,这可能被看作是不必要的混淆。 - Petr Skocik
2
我知道预处理并不总是 C 编译的自动部分,但我不知道这就是预处理器的运行方式。不错。 - John Bollinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接