C++ 匿名变量

2024-03-25

为什么这不起作用?

 0. #define CONCAT(x, y) x ## y
 1. 
 2. #define VAR_LINE(x) \
 3.     int CONCAT(_anonymous, __LINE__) = x
 4. 
 5. #define VAR_LINE2(x) \
 6.     int _anonymous ## x = 1
 7.
 8. int main()
 9. {
10.     VAR_LINE(1);
11.     VAR_LINE(1);
12.     VAR_LINE(1);
13.     VAR_LINE2(__LINE__);
14. }

上述宏展开的结果

int _anonymous__LINE__ = 1;
int _anonymous__LINE__ = 1;
int _anonymous__LINE__ = 1;
int _anonymous13 = 1;

如果我不必写的话会很方便__LINE__宏作为参数。

我想这个问题已经很清楚了。我希望能够生成匿名变量,以便在同一范围内声明多个变量时,该宏不会因重新定义错误而失败。我的想法是使用预定义的__LINE__宏,因为不会像这样在同一行上声明任何变量。但是宏扩展让我很困扰,你能帮忙吗?

更新:正确答案

感谢吕克·图雷耶。然而,建议的解决方案存在一个小问题。操作数和 ## 运算符之间必须有空格(显然标准另有规定,但如果运算符和操作数之间没有空格,PS3 风格的 GCC 将无法正确扩展宏)。

#define _CONCAT(x,y) x ## y
#define CONCAT(x,y) _CONCAT(x,y)

VAR_LINE 宏现在产生:

int _anonymous10 = 1;
int _anonymous11 = 1;
int _anonymous12 = 1;

这已经被验证可以在 Win32 (Visual Studio 2008)、XBOX360 (Xenon) 和 PS3 下工作。


您需要添加一个间接级别,以便__LINE__将扩大:

#define _CONCAT_(x,y) x ## y
#define CONCAT(x,y) _CONCAT_(x,y)

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

C++ 匿名变量 的相关文章

  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 如何启动异步任务对象

    我想开始收集Task同时处理对象并等待所有对象完成 下面的代码显示了我想要的行为 public class Program class TaskTest private Task createPauseTask int ms works w
  • 在 C# 中调用事件处理程序

    我一直在尝试学习如何在 C 中使用事件处理程序 但我无法弄清楚 handler this e 在以下代码中的作用 public event EventHandler ThresholdReached protected virtual vo
  • StreamReader,C#,peek

    我有一个 StreamReader 它偶尔会检查它是否有更多内容可以从简单的文本文件中读取 它使用 peek 属性 问题是 当我使用 peek 时 位置发生了变化 尽管不应该发生 FileStream m fsReader new File
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • 如何使用 xamarin 表单提示用户进行地理定位

    我正在 Xamarin Forms 应用程序中开发一个应用程序 需要请求地理位置权限 如果获得许可 它需要从设备获取地理位置数据 然后将地理位置坐标放入 Forecast io URL 我正在使用 James 的 Geolocator 插件
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所

随机推荐

  • D365 FO 到期合同简单查询

    我需要创建简单的查询 该查询将显示将在未来 3 个月内到期的所有合同 我知道如何使用 SQL 执行此操作 但在创建查询时如何在 Visual Studio 中执行此操作 我添加了数据源合同表 添加了范围 过期日期所在的列是 VALIDTO
  • Spring Transaction - 代理混淆

  • SwiftUI - 如何在 macOS 上隐藏窗口标题

    在具有新 SwiftUI 框架的 macOS 上 无需AppDelegate SceneDelegate 如何隐藏窗口标题 我发现 Apple 的这篇文章描述了如何为 Catalyst 应用程序执行此操作 但现在没有该委托 我该如何实现此目
  • 将 int 附加到 std::string

    我尝试了两种不同的方法来附加int to a std string 令我惊讶的是 我得到了不同的结果 include
  • Snakemake 输入函数异常。 AttributeError:“通配符”对象没有属性

    我有一个带有 ChIP seq 单端 fastq 文件名的列表对象allfiles path file1 fastq path file2 fastq path file3 fastq 我正在尝试设置该对象 allfiles 作为通配符 我
  • 如何以附加模式写入文本文件

    我的应用程序基于导航 UItextView 用于注释 UIViewController 我正在将文本数据写入文件 现在我需要在附加模式下编写 我正在尝试以下代码 但每次都使用相同的文本数据写入两次 并且不附加下一个文本数据到文件 void
  • 如何使 NodeJS 中的 request 调用同步?

    我的 Nodejs 应用程序中有一个名为 get source at 的函数 它接受 uri 作为参数 其目的是从该 uri 返回源代码 我的问题是我不知道如何使函数同步调用请求 而不是给它那个回调函数 我want控制流停止加载 uri 所
  • 将两个已排序的数组合并为一个

    嗨 我被问了以下问题 给定两个数组 即 array1 和 array2 它们都包含按排序顺序的数字 Array1 还包含 1 例如 array2 中的数字与 array1 中的 1 的数量一样多 示例如下 array1 1 1 1 1 56
  • 如何在Python中展平元组

    我有一个列表的以下元素 该列表有 100 个元素长 50 2 7387451803816479e 13 219 如何将每个元素转换为如下所示 50 2 7387451803816479e 13 219 a b c for a b c in
  • 当我更新顶点缓冲区对象时,应该如何更新它使用的顶点数组对象?

    通过 glBufferData 更新 VBO 尤其是其大小 可能会更改其物理内存地址 但不会更改 glGenBuffers 设置的缓冲区对象名称 VBO 通过调用 glVertexAttribPointer 链接到 VAO 其中有关 VBO
  • 在 Atom-shell 中禁用退格键

    我一直在搜索 interwebz 和 Atom shell 文档 试图找出如何禁用back 的功能backspace浏览器窗口中的键 我不想求助于 javascriptonkeydown监听器 有效 而是使用更本机的东西 更多地在应用程序级
  • 将值从文本框传递到控制器

    如何从文本框 电子邮件列表 获取值并将其发送到控制器 我一直在使用webforms 这是我第一次接触mvc View Html TextBox EmailList Html Action SendEmails 控制器 public Acti
  • 是否有用于 jasmine 角度控制器测试的生成器?

    我正在寻找能为角度控制器生成样板茉莉花测试的东西 看来您可以将控制器的依赖项拉出来并将它们放入规范中并节省一些输入 如果我是第一个有这个想法的人 我会感到震惊 但我找不到任何可以做到这一点的东西 除了一个似乎不起作用的自耕农项目 我最近在
  • ViewPager2 notificationItemChanged 的​​ FragmentStateAdapter 未按预期工作

    我正在将 ViewPager2 与 FragmentStateAdapter 一起使用 并且正在调用 notificationItemChanged position 但正如预期的那样 createFragment 方法不会再次调用 这是预
  • TinyMCE客户端验证问题

    我在使用 TinyMCE 编辑器时遇到问题 我的表单带有很少的文本字段和文本区域 tinymce 并启用了客户端验证 当我单击 保存 按钮时 所有文本字段都会进行验证 但需要单击两次才能验证tinymce内容 此外 验证仅在字段为空或条件不
  • 异步 ServiceController.WaitForStatus 如何执行?

    So ServiceController WaitForStatus https msdn microsoft com en us library system serviceprocess servicecontroller waitfo
  • 如何将javascript变量值分配给php变量[重复]

    这个问题在这里已经有答案了 我已经宣布了JavaScript 变量 var myJavascriptVar 12345 并且无法将该值分配给php多变的 myPhpVar myJavascriptVar 我知道 Ajax 可能可以解决我的问
  • 从现有 CXF Rest 服务生成 wadl

    我有使用 CXF 实现的工作 JAX RS 服务 如何生成 wadl 或者有类似球衣的东西吗http path to your restapp application wadl http path to your restapp appli
  • Facebook“无法从 URL 检索数据”

    当尝试对 facebook 进行图形 api 调用时 我收到以下错误 我知道我的回调 url 很好 因为当我在 facebook 调试器中测试它时 它可以很好地查看页面 我也在使用 Google App Engine 我真的认为这个错误可能
  • C++ 匿名变量

    为什么这不起作用 0 define CONCAT x y x y 1 2 define VAR LINE x 3 int CONCAT anonymous LINE x 4 5 define VAR LINE2 x 6 int anonym