【问题标题】:What does an empty # mean in a macro definition?宏定义中的空 # 是什么意思?
【发布时间】:2019-02-02 10:03:07
【问题描述】:

我有以下宏:

#define F(Args, ...) \
   // macro definition
#
   F(()) // looks like usage?
#undef F

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

【问题讨论】:

    标签: c++ c macros


    【解决方案1】:

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

    # 在自己的行中称为null directive,它什么也不做(就像评论一样好)。

    它实际上不再有用(除了作为视觉标记),但在史前 C 中,预处理器仅在 C 源文件以指令开头并且放置在 C 文件开头的空指令时才被调用确保文件被预处理(即,以后的指令有效)而不从具体指令开始的方法。

    【讨论】:

    • 我想它可以用来进一步混淆代码
    • @StackDanny 是的,它可能被视为不必要的混淆。
    • 我知道预处理并不总是 C 编译的自动部分,但我不知道这就是预处理器的工作方式。不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2014-01-17
    • 2012-12-30
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    相关资源
    最近更新 更多