宏函数表现得像循环一样

Ede*_*nia 0 c macros for-loop

考虑我设法编写的以下代码:

#include <stdio.h>
#define FOR(A, B, C) for(A; B; C++)

int main()
{
    FOR(i=0, i<10, i)
    printf("%i", i);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

输出是: 0123456789

如果我这样做,FOR(i=5, i<10, i) 那么输出分别是56789

我的问题是合法的吗?它会在不同的情况下导致任何错误吗?它是否像for循环一样工作?

unw*_*ind 6

是的,这是一个"合法"的宏,但不是,它不像真正的for循环那样工作.

你的宏不会处理这个:

int a, b;
for(a = 0, b = 4711; a < b; ++a);
Run Code Online (Sandbox Code Playgroud)

例如,因为您无法区分,用于构建更长初始化表达式的用于构成部件的表达式的用于分隔的表达式:

FOR(a = 0, b = 0, a < b, ++a);
Run Code Online (Sandbox Code Playgroud)

会破坏,因为它看起来像一个带有4个参数而不是3个参数的调用.

  • @didou是的,但在我看来,有点失败了.当然,像这样可怕的事情的"重点"从一开始就有点难以察觉.:) (3认同)
  • 您可以使用:FOR((a = 0,b = 0),a <b,++ a); (2认同)