我是一名新的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 ;-)
最佳答案
清晰远比聪明重要。越难弄清楚正确和在不正确时进行调试的难度就越大。
使用局部变量进行澄清或调试没有错。有一张油锯看到“避免过早优化的罪过”。使您的代码尽可能简单明了。如果您发现这还不够,那么就无法添加完成工作所需的复杂性。