【发布时间】:2015-03-16 14:40:01
【问题描述】:
这个问题与 C 或 C++ 语言能力密切相关。我不推荐下面的代码作为设计模式。我不使用它,也不鼓励它。但我只是想提高自己的知识!
我有一个包含标签和转到条件的定义。
#define BROP(num, sum) \
num = rand_lcg(generated); \
if (num % 2) \
{ \
rng1: \
generated = rand_lcg(generated); \
if (generated < 512) \
sum -= generated; \
else \
goto rng1; \
}
后来在代码中我这样使用它:
for (i = 0; i < iterations; i++)
{
BROP(num, sum);
BROP(num, sum);
BROP(num, sum);
// ...
}
我最终陷入循环展开并且标签被重新定义的情况。
每次定义被“实例化”时,我可以使用一个智能构造来让编译器重命名标签吗?
我知道所有避免这种说法的替代方法,但我仍然不知道问题的答案。
【问题讨论】:
-
您是否有理由不能在宏中只使用
do-while循环结构而不是goto? -
其实……为什么这不是一个函数?
-
C 还是 C++?它们是不同的语言!
-
如何避免分支?每个
if语句都会生成一个分支,这会让编译器更难为您优化。 -
@VAndrei,这真是一个糟糕的策略。标签可以引导人们找到他们认为合适的问题。
标签: c++ c compiler-errors