“被叫对象不是函数”错误 - C

时间:2013-06-05 12:58:45

标签: c pointers reference

int getSpeedOfMotorInPercent(int RPM)
{
    int speedOfMotor = (RPM/5000.0)*100;
    return speedOfMotor;
}

static char *test_GetSpeedOfMotor(int speedInPercent)
{
    mu_assert("error, RPM != 70%", speedInPercent == 70);
    return 0;
}

static char *run_all_tests(int RPM)
{
    mu_run_test(test_GetSpeedOfMotor(RPM));
    return 0;
}

我在mu_run_test(test_GetSpeedOfMotor(RPM));

上收到错误“被叫对象不是函数”

我尝试删除函数的指针,但后来我得到了更多的错误。

修改

#define mu_assert(message, test) do { if (!(test)) return message; } while (0)
#define mu_run_test(test) do { char *message = test(); tests_run++; if (message) return message; } while (0)
 extern int tests_run;

这是mu_run_test函数。它在头文件中提供给我。

1 个答案:

答案 0 :(得分:1)

您将test_GetSpeedOfMotor(RPM)作为test传递给宏,这将产生以下代码:

char *message = test_GetSpeedOfMotor(RPM)();

由于您可能正在使用不想更改的测试框架,只需从RPM函数的声明中删除test_GetSpeedOfMotor参数,然后像这样使用它:

int testRpmInPercent;

static char *test_GetSpeedOfMotor()
{
    mu_assert("error, RPM != 70%", testRpmInPercent == 70);
    return 0;
}

static char *run_all_tests(int RPM)
{
    testRpmInPercent = RPM;
    mu_run_test(test_GetSpeedOfMotor);
    return 0;
}

然后你必须找到另一种与测试函数共享RPM值的方法。就像全局变量或测试框架必须提供的任何方法一样。

如果您愿意更改测试框架,我会修改该定义(在()后删除test):

#define mu_run_test(test) do { char *message = test; tests_run++; if (message) return message; } while (0)