如何测试预处理器符号是否#define'd但没有值?

2024-02-01

使用 C++ 预处理器指令,是否可以测试预处理器符号是否已定义但没有值?像这样的东西:

#define MYVARIABLE
#if !defined(MYVARIABLE) || #MYVARIABLE == ""
... blablabla ...
#endif

EDIT:我这样做的原因是因为我正在从事的项目应该从环境中获取字符串/DMYSTR=$(MYENVSTR),并且该字符串可能为空。我想确保如果用户忘记定义此字符串,项目将无法编译。


索玛宏魔法:

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

#if !defined(MYVARIABLE) || (EXPAND(MYVARIABLE) == 1)

Only here if MYVARIABLE is not defined
OR MYVARIABLE is the empty string

#endif

请注意,如果您在命令行上定义 MYVARIABLE,则默认值为 1:

g++ -DMYVARIABLE <file>

这里 MYVARIABLE 的值是空字符串:

g++ -DMYVARIABLE= <file>

引用问题已解决:

#define DO_QUOTE(X)        #X
#define QUOTE(X)           DO_QUOTE(X)

#define MY_QUOTED_VAR      QUOTE(MYVARIABLE)

std::string x = MY_QUOTED_VAR;
std::string p = QUOTE(MYVARIABLE);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试预处理器符号是否#define'd但没有值? 的相关文章

随机推荐

  • 使 Appen 功能在 Google 谷歌表格/[重复]中运行得更快

    这个问题在这里已经有答案了 我有一个代码工作正常但没有优化 我是 Google App 脚本的新手 该代码执行以下操作 从外部URL获取数据 过滤数据 解析文件夹中包含的工作表中的数据 更改列标题 在特定列中附加内容 function my
  • PostgreSQL - 按 UUID 版本 1 时间戳排序

    我在用UUID版本1 https en wikipedia org wiki Universally unique identifier Version 1 date time and MAC address 作为主键 我想按 UUID v
  • 如何在 SwiftUI AttributedString 中渲染 Markdown 标题?

    我一直在尝试使用新的属性字符串 https developer apple com documentation foundation attributedstring随 iOS 15 一起发布 用于渲染存储在变量中的 Markdown 但是
  • 在 MVC 中使用 dotnet core 时如何删除 ErrorViewModel

    如果 ErrorViewModel 从我的项目中删除 它将无法运行 失败于app UseMvc 出现错误 System TypeLoadException 无法加载类型 程序集 DocumentGenerationService 版本 1
  • SED 更改标签之间的值

    我在 UNIX 上有这样的日志文件 start host1 java serv host1 def java es dev L2 1 dev w fr host1 def java es dev L3 0 dev w fr host1 de
  • 扫描线算法 - 一维平面的实现

    问题很简单 平面上有一些给定的一维线 我们需要找到至少有一行的空间的总大小 让我用一个示例图像来讨论这个问题 这可能是一个案例 Or 这可能是一个案例或类似的东西 我知道这是一个基本问题扫线算法 https en wikipedia org
  • 全屏显示时 Flex 中的文本输入字段不起作用

    大家好 我有一个问题 如果我的应用程序是全屏的 我无法单击任何文本输入组件 也无法在字段中输入任何文本 我尝试过在运行时创建文本输入字段 并且尝试在 Flex 构建器的 GUI 设计窗口上时在画布上创建它们 然而 它们都给出相同的结果 并且
  • 将 IO Int 转换为 Int

    我通过转换创建了一个组合框xmlWidget to a comboBox与功能castTocomboBox现在我想获取活动项目的文本或索引 问题是如果我使用comboBoxGetActive它返回一个函数IO Int结果 我需要知道如何获得
  • ASP.NET MVC 将 null 转换为零长度字符串

    我正在使用 MVC 3 并尝试将留空的字段作为零长度字符串而不是空值发送到数据库 这可能与数据注释属性有关吗 如果不是 从空值转换的最合适的位置是什么 是在模型验证期间吗 虽然不理想 但这是我所知道的最好的方法 DisplayFormat
  • 找出超速时间段?

    我脑海中浮现出一些有趣的事情 假设我们有一个表 在 SQL Server 中 如下所示 Location Velocity Time 例如 Location Velocity Time 1 40 1 20 2 35 2 00 3 45 2
  • 获取特定键的所有值

    我在 mongoDB 中有一个数据 我想检索一个键的所有值 category 使用Python代码 我尝试了几种方法 但在每种情况下我都必须给出要检索的 值 任何建议 将不胜感激 id my id1 tags tag1 tag2 tag3
  • Keras 构建 9 维特征向量网络

    我有以下简单的数据集 它由 9 个特征组成 是一个二元分类问题 特征向量的示例如下所示 每行都有其对应的 0 1 标签 30 82 1 2 73 172 117 2 2 655 94 30 174 1 5 8 256 189 3 2 587
  • PHP:将数字四舍五入为 16 位小数

    嗨 我正在尝试将数字四舍五入16位小数但它只显示并且不会四舍五入直到14位小数 这是我的尝试 OUTPUT 0 16346153846154 预期输出 0 1634615384615385 我知道float只有 14 位十进制数字 还有其他
  • Windows 7 将 CTRL + j 映射到向下箭头键

    I have been searching for months for a way to map a key combination CTRL something to a directional key like down or up
  • QBOv3 XML 验证错误

    我正在尝试在批量请求中一起发送几个 Quickbooks 查询 我遵循了 Intuit 在这里提供的格式https developer intuit com docs 0025 quickbooksapi 0050 data service
  • 在内核调试模式下连接到目标机器时无法中断

    我正在启动一个包含 Windows 微过滤器的原型 我已经设置好了我的环境 目标虚拟机 实际上是 3 个 Windows 7 8 和 8 1 主机开发计算机 托管 Visual Studio 2013 和 HyperV VM 我终于设法将测
  • 设置特定配置文件时不加载 Spring bean

    背景 因此 我有几个与外部系统接口的 bean 对于开发来说 模拟外部系统并用一些产生或多或少静态响应的实现替换接口 bean 是很方便的 所以我一直在做的是创建一个接口 真正的实现和一个存根实现 如下所示 public interface
  • Colorbox:显示/模拟内联内容的“加载”动画

    您好 我正在使用 ColorBox 我们使用 jquery 在表单中执行了几个步骤 并且我们希望在等待 ajax 回复时显示 ColorBox 的加载动画 我们如何使用它 提前谢谢您 我认为你想要的是 fastIframe thediv c
  • 如何使用 jQuery UI 滑块动态更新 highcharts

    我正在寻找一种根据 jQuery UI 滑块确定的值动态更新 Highcharts 的方法 我还不太熟悉 AJAX 或 JSON 所以我运气不太好 我试图让收入在给定的月份内逐步增加 例如订阅服务 为了方便起见 我把它放在 jsFiddle
  • 如何测试预处理器符号是否#define'd但没有值?

    使用 C 预处理器指令 是否可以测试预处理器符号是否已定义但没有值 像这样的东西 define MYVARIABLE if defined MYVARIABLE MYVARIABLE blablabla endif EDIT 我这样做的原因