包含循环作为表达式的宏
Macro including loop as an expression?
我使用了许多宏来实现常见的循环操作。例如:
#define findIdx(count, cond, out) out = count; for (int i = 0; i < count; i++)
if (cond) out= i;
使用方式类似:
int arr[5] = {1, 12, 13, 19, 21};
int idx;
findIdx(5, arr[i] == 13, idx); //idx is set to 2
有没有一种巧妙的方法可以在不牺牲便利性和不使用c++11(我不可用)的情况下将此功能作为表达式来实现?这样我就可以直接将结果分配给变量,或者将结果用作函数的参数?
在表达式中嵌入语句:
-
您可以使用GCC语句表达式
-
你可以使用Clang Block
-
在C++03中,您可以在表达式中获取匿名结构的静态成员(或者至少g++不会抱怨):
foo( ((struct { static void f() { return; } }){}).f );
(因此宏会将循环代码放在
f
的主体中)
在符合标准的C、任何版本(缺少Greenspunning)中都无法做到这一点。该标准明确禁止在逗号表达式中使用setjmp
,否则您可能会首先考虑这一点。
相关文章:
- C++正则表达式无限循环
- 为什么在 while 循环中返回表达式不起作用
- 如何在 c++ 下使用嵌套循环和正则表达式降低时间复杂度?
- 使用 constexpr 或模板元编程简化较长的展开循环表达式
- 符号和未签名整数表达式之间的比较,以进行循环误差
- 循环赋值的多维数组:表达式必须是可修改的左值
- 射击时从列表中删除外星人 - 找出循环;"表达式:无法递增结束列表迭代器"
- 如何在条件表达式中使用 'cin' 正确退出 while 循环?(C++,CLion)
- 基于范围的正则表达式匹配的 for 循环
- C++ 循环:“;”标记之前的预期主表达式
- 逗号(,)在条件部分中两个表达式之间的for循环中的工作方式
- 计算一个表达式来计算循环
- C++ 循环和布尔表达式
- 为什么我的正则表达式会导致无限循环
- 执行基本的 for 循环并得到错误:")"之前的预期主表达式
- 是否可以将多个关系表达式放入 for 循环的测试条件中
- 为什么不能在 do while 循环的表达式部分内声明一个变量?
- 基于范围的 for 循环是否缓存容器表达式,或每次迭代重新计算它
- C++:布尔表达式导致无限 while 循环
- 从嵌套循环创建数学表达式