gpt4 book ai didi

c++ - 如何判断#define 是否有值

转载 作者:行者123 更新时间:2023-12-02 16:19:37 25 4
gpt4 key购买 nike

据我所知,对于 C 预处理器,您可以通过以下两种方式之一使用 #define:

  1. #define SOME_VAL 3.4159f
  2. #define SOME_FLAG

我正在编写一个库,我正在使用#defines 来让用户解析设置以进行编译。我的问题是我需要知道使用了上述两种情况中的哪一种。

例子:#define DISABLE_FEATURE#define DISABLE_FEATURE false

我有什么方法可以区分这两者,还是我必须在文档中指定使用哪一个?

最佳答案

do I have to specify in documentation which to use?

从技术上讲不,您不需要。但你应该。

您可以通过执行以下操作轻松规范化检查 false:

#ifndef DISABLE_FEATURE
#define DISABLE_FEATURE false
#endif

// later
#if DISABLE_FEATURE == false
...

检查定义性的规范化有点棘手,因为您无法将空宏与值进行比较。但这是可能的。您可以使用这样的宏魔法(从 here 借用的扩展魔法):

#define DO_EXPAND(VAL)  VAL ## 1
#define EXPAND(VAL) DO_EXPAND(VAL)

#if defined(DISABLE_FEATURE) \
&& (EXPAND(DISABLE_FEATURE) == false)
#undef DISABLE_FEATURE
#endif

// later
#ifdef DISABLE_FEATURE
...

我建议改为坚持一种方式并记录下来。我特别建议检查定义性,并完全忽略该值。

关于c++ - 如何判断#define 是否有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65804642/

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