相关疑难解决方法(0)

如何在C预处理器中生成唯一值?

我正在编写一堆相关的预处理器宏,其中一个生成另一个跳转到的标签.我以这种方式使用它们:

MAKE_FUNNY_JUMPING_LOOP(
  MAKE_LABEL();
  MAKE_LABEL();
)
Run Code Online (Sandbox Code Playgroud)

我需要一些方法来生成唯一标签,每个内部MAKE_LABEL调用一个,使用预处理器.我尝试过使用__LINE__,但由于我MAKE_LABEL在另一个宏内部调用,它们都有相同的行并且标签发生碰撞.

我想要扩展到的是:

MAKE_FUNNY_JUMPING_LOOP(
  my_cool_label_1:  // from first inner macro
  ...
  my_cool_label_2:  // from second inner macro
  ...
)
Run Code Online (Sandbox Code Playgroud)

有没有办法用预处理器生成哈希值或自动递增整数?

macros c-preprocessor

17
推荐指数
4
解决办法
2万
查看次数

C宏令牌连接涉及变量 - 是否可能?

我正在尝试定义一个宏来生成一个包含变量的令牌名称.

基本上,我正在尝试的是:

#define GLUER(x,y,z) x##y##z
#define PxDIR(x) GLUER(P,x,DIR)

int main() {
  int port;
  port = 2;
  PxDIR(port) |= 0x01;
}
Run Code Online (Sandbox Code Playgroud)

我希望在上面的语句中生成令牌P2DIR,但根据我的编译器输出,它生成令牌PportDIR,这不是我想要的.这里有什么帮助?或者我正在尝试做什么不可能?

c concatenation token stringification c-preprocessor

8
推荐指数
3
解决办法
1万
查看次数