gpt4 book ai didi

c++ - 宏在C++中展开

转载 作者:行者123 更新时间:2023-12-02 10:04:36 25 4
gpt4 key购买 nike

定义两个宏,如下所示:

#define MACRO_COMBINE_INNER(A,B) A##B
#define MACRO_COMBINE(A,B) MACRO_COMBINE_INNER(A,B)

我们使用这些宏
MACRO_COMBINE_INNER(ABC,__LINE__)
MACRO_COMBINE(ABC,__LINE__)

如果当前行号是123,则为 LINE == 123,为什么从两个宏扩展结果的原因是:
ABC__LINE__
ABC123

最佳答案

扩展顺序在这里起作用,首先是离群宏被扩展,然后是内部宏。在第一种情况下,扩展MACRO_COMBINE_INNER后,您将获得:

  ABC##__LINE__

变成 ABC__LINE__,因为 __LINE__在这里不是单独的标记。在第二种情况下,预处理器扩展 MACRO_COMBINE(ABC,__LINE__),然后
__LINE__被扩展。 `
  MACRO_COMBINE_INNER(ABC,123)

然后扩展 MACRO_COMBINE_INNER
  ABC##123

stringify运算符有类似的行为,需要创建这样的宏
#define STRINGIFY(x) #x
#define STRING(x) STRINGIFY(x)

为了能够在字符串文字中使用 __LINE__:
#define THROW_BAD_INDEX(x) throw std::out_of_range \
(__FILE__ ":" STRING(__LINE__) ": Bad index")

关于c++ - 宏在C++中展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60946161/

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