【问题标题】:How to void if/else preprocessor macro with another define?如何用另一个定义使 if/else 预处理器宏无效?
【发布时间】:2018-11-14 10:45:08
【问题描述】:

假设我有一个 c 头文件 test.h

// test.h
#ifdef A
    int a;
#else
    int b;
#endif

现在假设我想以这样一种方式构建我的代码,即如果定义了 B,则同时定义 ab。 有没有更聪明的方法,而不是:

// test.h
#ifndef B
#ifdef A
    int a;
#else
    int b;
#endif
#else
    int a;
    int b;
#endif

?

谢谢

【问题讨论】:

  • 与您的问题无关,但不要在头文件中定义变量,只需声明它们。此外,应避免使用全局变量。
  • 我知道这一点,但我只是想让示例尽可能简单。考虑到 a 和 b 可以是 wathever 代码。我编辑了问题
  • 一旦您有一个或多个答案,请不要对您的问题进行大量编辑,因为这会使现有答案无效。
  • 没有看到你的答案。对不起
  • 虽然有时需要条件编译,但应尽可能减少。通常有更好的方法来做事,但是您的示例有点过于抽象,无法提供更好的解决方法。对我来说,这似乎是 XY 问题。

标签: c c-preprocessor conditional-compilation


【解决方案1】:

只需分别处理这两个变量,并确定何时定义每个变量的逻辑:

#if defined(A) || defined(B)
    int a;
#endif
#if !defined(A) || defined(B)
    int b;
#endif

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多