我是一名新的C程序员,正在为家庭作业编写一些数据结构。
我在这里有两个问题。


我们看到了很多C函数指针的示例,通常用于保存代码重复。我弄乱了这个函数,最初是我写的:


(我们预先定义了常量。缩进也已关闭)。

    static PlayerResult playerCheckArguments(const char* name, int age,
    int attack, int defense) {
    PlayerResult result = PLAYER_SUCCESS;
    if (!name) {
    result =  PLAYER_NULL_ARGUMENT;
    } else if (strlen(name) > PLAYER_MAX_NAME_LENGTH) {
    result =  PLAYER_NAME_TOO_LONG;
    } else if (invalidAge(age)) {
    result = PLAYER_INVALID_AGE;
    } else if (invalidAttack(attack)) {
    result = PLAYER_INVALID_ATTACK;
    } else if (invalidDefense(defense)) {
    result =  PLAYER_INVALID_DEFENSE;
    }
    return result;
}


直到我得到这个食尸鬼:

    static PlayerResult playerCheckArguments(const char* name, int age, int attack,
    int defense) {
void* arguments[PLAYER_NUM_OF_PAREMETERS] = { name, &age, &attack, &defense };
PlayerResult (*funcArray[PLAYER_NUM_OF_PAREMETERS])(
        int) = {&invalidName, &invalidAge, &invalidAttack, &invalidDefense };
PlayerResult result = PLAYER_SUCCESS;
for (int i = 0;
        i < PLAYER_NUM_OF_PAREMETERS && result == PLAYER_SUCCESS; i++) {
    PlayerResult (*func)(int) = funcArray[i];
    void* key = arguments[i];
    result = func(key);
}
return result;


我的第一个问题是-我为什么应该使用/编写第二个函数而不是另一个函数,并且通常尝试使用这种“复杂性”,这显然会降低代码的清晰度和/或简单性?

现在,关于第二个问题:您可能已经注意到,为了方便调试,我使用了许多局部变量。这样,我可以查看所有相关评估并在程序运行时对其进行有效监视。
除了使用局部变量之外,还有其他方法可以显示函数中的表达式吗?

非常感谢!

返回0 ;-)

最佳答案

清晰远比聪明重要。越难弄清楚正确和在不正确时进行调试的难度就越大。

使用局部变量进行澄清或调试没有错。有一张油锯看到“避免过早优化的罪过”。使您的代码尽可能简单明了。如果您发现这还不够,那么就无法添加完成工作所需的复杂性。

07-24 09:38
查看更多