对于#define中的循环

hsp*_*pim 4 c loops for-loop c-preprocessor

#include <stdio.h>
#define UNITS {'*', '#', '%', '!', '+', '$', '=', '-'}

#define PrintDigit(c, d) (for (i=0; i < c ; i++)putchar(unit[d]);)

char unit[] = UNITS;

//void PrintDigit(c, element) {
//  int i;
//  for (i=0; i < c ; i++)
//      putchar(unit[element]);
//}


int main( ) {
    int i, element=4;
    PrintDigit(10, element);
    putchar('\n');
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这里的功能PrintDigit()按预期工作.当试图将函数转换为#define时,gcc不断在for循环中抛出语法错误.知道问题是什么吗?

cod*_*ict 5

您已将for循环括在括号中,您需要将其删除.

更改

#define PrintDigit(c, d) (for(i=0; i < c ; i++)putchar(unit[d]);)
Run Code Online (Sandbox Code Playgroud)

#define PrintDigit(c, d) for(i=0; i < c ; i++)putchar(unit[d]);
Run Code Online (Sandbox Code Playgroud)

编辑:

这样做的原因是C语法不允许statement(iterative在这种情况下的语句)在括号内但允许expression.

您可以在这里查看C语法.