为什么我会收到错误" Expression Syntax"执行以下C代码时:

时间:2015-10-03 12:39:17

标签: c stdio

#include<stdio.h>
#define PRINT(a,b) (while(a<b){printf("%d < %d\n",a,b); ++a;})
int main(void)
{
  PRINT(1,5);
  return 0;
}

我收到了行PRINT(1,5);

的表达式语法错误

3 个答案:

答案 0 :(得分:3)

C编译器正在查看C language preprocessor的代码输出。您可以直接运行预处理器以确定编译器遇到问题的处理代码的哪个部分。一旦了解了预处理器的工作原理,您就可以在不必执行此操作的情况下发现此类错误。

在我的gnu gcc环境中,cpp完成了这项工作:

% cpp <your source file name>

会打印大量代码但最后会看到

int main(void)
{
  (while(1<5){printf("%d < %d\n",1,5); ++1;});
  return 0;
}

你看到这里有什么问题吗? while语句不是表达式,因此不能包含在()中。接下来,不允许使用++ 1,因为1=1+1没有意义。您需要使用变量。

答案 1 :(得分:1)

您在评论中得到了解释为什么会出错。为了得到正确,你可以这样做 -

#define PRINT(a,b)        \
for(int i=(a);i<(b);i++)   \
 {                          \
    printf("%d < %d\n",i,b); \
 }

答案 2 :(得分:1)

As&#34; Cool Guy&#34;说编译器&#34;看到&#34;传递给宏的值,就像你输入的那样,而不是变量,绝对不是实际的类型变量。

你想要的可能是:

#define PRINT(a, b) int c=(a);while(c<(b)){printf("%d < %d\n", c, (b));++c;}

为了更清楚,但是......

#define PRINT(a, b)                   \
    int c = (a);                      \
                                      \
    while (c < (b)) {                 \
        printf ("%d < %d\n", c, (b)); \
        ++c;                          \
    }

这假设你实际上需要一个while循环。

否则请使用for循环,它更容易,更清洁。