【问题标题】:Why is #undef not working for my function?为什么#undef 不适用于我的功能?
【发布时间】:2022-01-07 15:31:55
【问题描述】:

我在开头定义了一些东西:

#define noprint

然后我在我的函数中返回,如果它被定义:

void print()
{
    #ifdef noprint
        return;
    #else
        //do stuff
    #endif
}

然后在main函数中:

main()
{
    #undef noprint
    print();
}

它仍然不起作用。怎么会?

【问题讨论】:

  • #define 只是文本替换。您对print() 的定义将具有执行这些替换的任何结果。当您在main 中调用它时,它会使用该定义。它不会回过头来重新编译 print() 的定义,如果您之前定义不同的话,它会是什么
  • 知道了,谢谢。

标签: c++ undef


【解决方案1】:

宏不是变量。它们是一个简单的文本替换工具。如果定义或取消定义宏,则(取消)定义对宏之前的源没有影响。函数定义在定义后不会改变。

例子:

#define noprint
// noprint is defined after the line above

void print()
{
    #ifdef noprint // this is true because noprint is defined
        return;
    #else
        //do stuff
    #endif
}

main()
{
    #undef noprint
// noprint is no longer after the line above
    print();
}

预处理完成后,生成的源代码如下所示:

void print()
{
    return;
}

main()
{
    print();
}

附:你必须给所有函数一个返回类型。 main的返回类型必须是int

【讨论】:

  • 是的,我已经为 main 返回 0,但我把它放在帖子之外,因为我从来没有让它返回任何东西,而且它是隐含的
  • @PupperGump main 的特殊之处在于您不需要返回语句。但是你必须声明所有函数的返回类型。
  • 哦,是的,我明白了。如果我不这样做,编译器无论如何都会警告我。
猜你喜欢
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多