如何获取__COUNTER__的最后一个值
How to get the last value of __COUNTER__
我有一个宏,做了类似下面的事情:
#define MAKE_VALS(...)
int val1 = 0;
int val2 = 0;
:
if(val1 == val2)
{
...
}
,我需要在一个函数中多次使用它。问题是,由于val1和val2的多个定义,多次使用它会导致多个定义错误。
使用__COUNTER__
和##
将解决问题,但我看不出如何为if语句获得正确的变量名称?我不能再用__COUNTER__
了,因为我会得到下一个值。我需要一种方法来得到__COUNTER__
的最后值。这能做到吗?
p。我不想用{}
s来解决这个问题。我已经简化了这里的实际问题,使用{}
s会导致其他问题(这对我的问题并不重要)。
无论这样做的目的是什么,您都可以使用几个级别的宏来实现:
#define MAKE_VALS(...) MAKE_VALS1(..., __COUNTER__)
#define MAKE_VALS1(..., counter) MAKE_VALS2(..., counter)
#define MAKE_VALS2(..., counter)
int val1##counter = 1; int val2##counter = 2;
val1##counter = whatever; val2##counter = hunoz;
这样,您可以在同一作用域中多次使用MAKE_VALS
,并且每次调用都将创建一组新的变量。请注意,如果没有MAKE_VALS1
,您的变量将被命名为val1__COUNTER__
,以此类推,并且额外的级别使其成为实际数字。
这是一个很好的宏观写作练习,但我同意在我之前的人质疑这是否是实现你想要实现的目标的正确方式。但是我已经说得够多了,所以我希望这能解决你的问题。
#define MAKE_VALS(m, n, ...)
int val ## m = 0;
int val ## n = 0;
:
if(val ## m == val ## n)
{
...
}
使用:
MAKE_VALS(__LINE__,
__LINE__, ... ); //second __LINE__ on next line
将第二个__LINE__
放在下一行,以避免m
和n
的值相同。
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 仅显示链表的最后一个元素
- 测试迭代器是否位于列表中的最后一个
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- std::矢量保存 只推送最后一个元素
- 反转后不返回最后一个元素
- 如何删除矢量中的重复值,最后一个除外
- 如何在写入文件时擦除最后一个逗号
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 在 QListView 中显示最后一个元素
- 如何获取 std::filesystem::p ath 中的最后一个目录?