与 C 预处理器“字符串化”相反

2024-01-15

当使用 C 预处理器时,可以像这样对宏参数进行字符串化:

#define TO_STRING(x) "a string with " #x

所以使用时,结果如下:

TO_STRING(test)将扩展到:"a string with test"

有什么办法可以做到相反吗?获取字符串文字作为输入参数并生成 C 标识符?例如:

TO_IDENTIFIER("some_identifier")将扩展到:some_identifier

谢谢您的回答。

编辑:对于那些想知道我需要它做什么的人:

我想通过字符串标识符引用 3D 引擎场景图中的节点,但同时避免在紧密循环中比较字符串。所以我想我会编写一个简单的工具,它将在编译的预构建步骤中运行并搜索预定义的字符串 - 例如ID("something")。然后,对于每个这样的标记,它将计算括号之间的字符串的 CRC32,并生成一个带有包含这些数字标识符的#defines 的头文件。例如对于字符串"something"这将是:

#define __CRC32ID_something 0x09DA31FB

然后,生成的头文件将包含在每个 cpp 文件中,使用ID(x)宏。这ID("something")当然会扩展到__CRC32ID_something,因此实际上编译器看到的是简单的整数标识符,而不是人类友好的字符串。当然现在我就满足于ID(something)但我认为使用引号会更有意义 - 一个不知道如何ID宏观作品可以认为something不带引号是 C 标识符,而实际上这样的标识符根本不存在。


不,你不能解开某些东西。

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

与 C 预处理器“字符串化”相反 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 用于解析 Rust 中的匹配臂的递归宏

    我正在尝试编写一个宏来将一组规则扩展为执行标记匹配的代码 但无法在不导致宏扩展错误的情况下生成正确的代码 我知道我可以通过其他方式处理这个问题 但这里的关键问题不是如何解析令牌 而是如何编写一个可以使用匹配臂递归扩展令牌树的宏 这个想法是我
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 首次设置 时 FacesContext#getViewRoot() 返回 null

    我正在尝试更改一页中的 JSF 应用程序区域设置 并且这必须更改我的所有页面区域设置 我已关注此链接 效果很好JSF 中的本地化 如何记住每个会话而不是每个请求 视图选择的区域设置 https stackoverflow com quest
  • 如何在 Java 中读取也具有空值的 Excel 单元格...?

    我正在使用 Apache POI 3 6 我有一个专栏是blank 我希望能够阅读它 然后转到下一栏 即使我能解决NullPointerException问题是我无法到达下一个牢房 这是我的代码片段 HSSFCell cell row ge
  • 从 Java 程序运行 SQL 文件脚本

    我有一组 SQL 文件可以转换我的原始数据集 目前 我打开每个文件并执行它 如何执行 Java 程序中的每个文件 目标是使这个过程更加自动化 我想做类似的事情SqlScript execute myScript sql NOTE这些 SQL
  • 为什么我们不能在堆栈上分配动态内存?

    在堆栈上分配内容非常棒 因为我们有 RAII 并且不必担心内存泄漏等问题 然而有时我们必须在堆上分配 如果数据真的很大 推荐 因为堆栈很小 如果要分配的数据的大小仅在运行时才知道 动态分配 两个问题 为什么我们不能分配动态内存 即大小为 仅
  • 节点 process.env 变量为空

    我正在构建我的第一个 Express 应用程序 它需要使用理想情况下保持安全的 API 密钥与 API 进行交互 所以我想遵循一个基本模式 将密钥 以及任何未来的环境变量 保存在一个 gitignored env根目录下的文件 为了不重新发
  • 如何绘制 (x,y,z)

    Is there anyway to plot x from x textbox y from y textbox and z from z textbox in vb form It is windows application I ha
  • 将文件名读入数组

    我想获取文件列表 然后将结果读入一个数组 其中每个数组元素对应一个文件名 这可能吗 不要使用ls it s 不打算 https mywiki wooledge org ParsingLs以此目的 使用通配符 shopt s nullglob
  • 如何使用findText不区分大小写?

    我尝试在 Google 文档中搜索字符串 默认情况下findText区分大小写 我该如何使用它不区分大小写 该参考文献称 使用正则表达式在元素内容中搜索指定的文本模式 这就是我尝试过的 function search string var
  • MongoDB C++,如何在插入时添加 ISODate 值

    这是关于新的 MongoDB C 驱动程序 不是旧版驱动程序 我可以这样插入文档 value Value document lt lt Key lt lt Value lt
  • .NET 中的字符串转换

    为什么 net中有这么多方法可以转换为字符串 我见过的方法是 ToString Convert ToString 和 string 有什么不同 Convert ToString obj 将指定值转换为其等效的字符串表示形式 将返回Strin
  • 调整 GC 以进行大型缓存刷新

    我的内存中有一个很大的缓存 使用com google common cache LoadingCache 使用 Scheduler 会在 10 分钟后刷新 如下所示 ScheduledExecutorService refresher Ex
  • Mac OS X 10.9 - 设置永久环境变量

    如何在 Mac OS X 10 9 中设置永久环境变量 即每次启动新终端会话时不需要导出的环境变量 我找到了许多关于修改我的答案 bash profile and profile然而 这两种选择似乎都不是永久的解决方案 只是暂时的 我试图设
  • 我应该将 SQL 查询放在 Rails 中的哪里?

    我应该在 Rails 中的什么位置放置 SQL 查询的最佳实践是什么 我是否应该在模型中创建方法 例如 find all public items 其中我在所有条件下使用查找方法 然后在控制器中使用它们 就像这样 我将所有查询都放在一个地方
  • 为什么占位符伪元素上的转换属性在 Chrome 中有效?

    我正在闲逛 placeholder当我注意到一些奇怪的事情时 Codepen Chrome 59 0 3071 上的伪元素 请看我的JSFiddle https jsfiddle net 4ct6zkaw 简而言之 此 CSS 不应启用 p
  • 红外 LED 跟踪:使用 OpenCV 跟踪 x、y、z 位置

    我正在寻找一种方法来解决我遇到的计算机视觉问题 我有工作跟踪系统 4 8个摄像头 给出红外 LED 的 x y z 每个 LED 传输独特的 8 位信号 跟踪系统价格昂贵 而且界面对于我们的用户来说太难使用 我想用我自己的 OpenCV 实
  • 按钮垂直对齐引导程序

    我正在尝试以简单的形式对齐按钮 我这样做了 div class panel panel default div class panel heading teste div div class panel body div class row
  • 将应用程序提交到使用 Firebase 的 App Store

    我有一个关于在使用 Firebase 时向应用程序商店提交应用程序的快速问题 我想知道 Firebase 方面是否需要做任何事情才能使数据库可供任何人使用 或者我可以只完成提交应用程序的正常过程并假设数据库将为测试人员或下载该应用程序的任何
  • std::includes 实际上做了什么?

    From 标准 https timsong cpp github io cppwp n4659 alg set operations includes std includes 返回 true if first2 last2 为空或者范围内
  • AVL树如何在插入时平衡树

    我想为 avl 树创建一个插入函数 然而 插入函数必须是递归的并且必须是平衡的 我有一个将树向左旋转的方法 PivoterAGauche 和一个将树向右旋转的方法 PivoterADroite Pivot left Private Func
  • 与 C 预处理器“字符串化”相反

    当使用 C 预处理器时 可以像这样对宏参数进行字符串化 define TO STRING x a string with x 所以使用时 结果如下 TO STRING test 将扩展到 a string with test 有什么办法可以