我试图创建一个宏来替换for循环
我希望它能像这样工作:
f(var, start, Eend)
其中var是循环变量的名称,start是开始和结束的值,它停止的值。 E是可以存在与否的符号。如果存在,则为=
我的宏实际上是这样的:
#define f(var, s, e) for(int var = s, kx = (s<e? 1 : -1); var != e; var += kx)
但是这个定义无法承受=,所以我想像这样扩展它:
f(i, 10, =15) cout<<" "<<i;
output: 10 11 12 13 14 15
我的问题是,是否可以删除宏的Eend参数的第一个字符。
我可以使用
发现它是否相等#Eend[0] == '='
但在我不能使用Eend与s进行比较并找出我是否必须使用++或 -
这就是我想要的:
#define f(var, s, Eend)
for(int var = s, kx = s<end? 1:-1, LIM = #Eend[0] == '='? end+kx : end; var!=end; var += kx)
其中end是Eend而没有&#39; =&#39; (如果存在)
答案 0 :(得分:1)
对于你的宏问题,你可以简单地定义两个宏,稍微不同(希望是助记符)的名字。
例如,如果我理解正确的意图,
State
如果冗余不合适,那么你可以用第三个常见的实现宏来表达它们。
在没有宏的情况下执行此操作会更有效,但您只需要执行一次定义。
您可以避免宏的名称冲突。
E.g。它可以这样:
#define xf(var, s, e) for(int var = s, kx = (s<e? 1 : -1); var != e; var += kx)
#define f(var, s, e) for(int var = s, kx = (s<e? 1 : -1), e2 = e + kx; var != e2; var += kx)