gpt4 book ai didi

C - Eclipse CDT - 高效调试 + 什么是更好的代码(函数指针)?

转载 作者:行者123 更新时间:2023-11-30 17:44:57 25 4
gpt4 key购买 nike

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

  1. 我们看到很多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 ;-)

最佳答案

清晰远比聪明更重要。越难弄清楚,就越难做到正确,并且在不正确时进行调试。

为了清晰或调试目的而使用局部变量并没有什么问题。有一个 ole saw 写着“避免过早优化的罪恶”。让您的代码尽可能简单、清晰。如果您随后发现工作量不够,只需添加尽可能少的复杂性即可完成工作。

关于C - Eclipse CDT - 高效调试 + 什么是更好的代码(函数指针)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com