C错误:'{'标记之前的预期表达式

use*_*309 0 c

这是代码http://pastebin.com/Y7zQkVHZ

并且编译器给出了上述错误.这是什么错误?谢谢(:

以下是可立即读取的代码:

#include <stdio.h>
#define round(a) {    \
    if(a < 0)    \
        ((a + 0.5) < (int)a)? (int)a: (int)a + 1;    \
    else        \
        ((a - 0.5) < (int)a)? (int)a: (int)a + 1;    \
}

#define ARRLENG 8 /* array length */

/* function prototype */
void arrRounder(double[ARRLENG]);

int main()
{
    double arr[ARRLENG] = {2.13, 6.9, 9.49999, 0.5, 8.0, 0, -2.4, -2.5};
    arrRounder(arr);
    return 0;
}

void arrRounder(double arr[ARRLENG])
{
    int i = 0;

    for(i = 0; i < ARRLENG; i++)
        arr[i] = round(arr[i]);

    for(i = 0; i < ARRLENG; i++)
        printf("%lf\n", arr[i]);
}
Run Code Online (Sandbox Code Playgroud)

glg*_*lgl 5

你的round()宏确实是语句和表达的混合,这是不允许的.

要么你应该把它if变成另一个三元运算符 - 这使得整个东西更加难以理解 - 或者你应该把它变成一个函数.