gpt4 book ai didi

c++ - __LINE__ 在预处理阶段的哪一点展开?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:25 24 4
gpt4 key购买 nike

我在头文件中有一个函数:

template <int line>
inline void log() {}

然后我尝试这个技巧来使它更容易使用:

#define LOG_LINE log<__LINE__>()

然后在 .cpp 文件中我这样做:

void main()
{
LOG_LINE;
}

它似乎按照我希望的方式工作。我从 .cpp 文件中获取行,而不是 LOG_LINE 所在的行在 .h 文件中声明。但我不明白它是如何工作的。 C++是否执行双 channel 预处理,留下像__LINE__这样的特殊宏?第二次通过?这是可移植(标准)行为吗?我是否应该期望它适用于所有主要的 C++ 编译器?到目前为止,我只尝试过 MSVC。

最佳答案

应该区分通过整个输入的遍数,这是像单遍这样的术语通常指的是什么,以及嵌套扩展的处理。预处理器通常会一次性展开文件中的所有宏,但它会正确地展开展开后的形式,直到没有任何内容可展开为止。

LOG_LINE扩展为 log<__LINE__>() , 其中__LINE__再次扩展为 3 ,产生最终的扩张log<3>() — 所有这些都在一次通过编译单元中完成。

关于c++ - __LINE__ 在预处理阶段的哪一点展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22250458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com