gpt4 book ai didi

c - 寻找改进此代码的方法或者是否有任何我不应该做的事情

转载 作者:行者123 更新时间:2023-11-30 20:46:45 24 4
gpt4 key购买 nike

尝试学习 C,所以我编写了这个简短的程序来尝试模仿类(class)。这段代码中是否存在我不应该使用 C 语言执行的操作,或者是否有任何可以改进它的方法(例如最佳实践或其他方法)?

结构体.h

struct weapon {
char name[30];
int damage;
int durability;
};

struct player {
int health;
int armor_level;
int currency;
struct weapon player_weap;
};

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "structs.h"

struct player new_player();

void main() {

struct player user = new_player();

printf("The players health is %d.\n", user.health);
printf("The players armor is %d.\n", user.armor_level);
printf("The players currency is %d.\n", user.currency);
printf("The players weapon is the %s.\n", user.player_weap.name);
printf("The players weapon does %d damage and has %d durability.\n", user.player_weap.damage, user.player_weap.durability);

}

struct player new_player() {

struct player new_player;
new_player.health = 100;
new_player.armor_level = 0;
new_player.currency = 0;
strcpy(new_player.player_weap.name, "Starter Sword");
new_player.player_weap.damage = 1;
new_player.player_weap.durability = 100;

return new_player;

}

最佳答案

嗯,有几点:-如果结构不是太大,可以按照这种方式进行。 这是完全正确的

malloc 在计算上比从函数返回时复制变量的成本更高。如果结构大小较大,那么您应该对其进行malloc。这样您就不会最终在堆栈中使用大量内存。

您应该尝试考虑使代码可重用。您可以保留一个将打印结构的函数。类似的东西(与您保留一个单独的函数来获取结构实例的原因相同)。

void printPlayer(struct player p){
...
}

这样,每当您尝试打印它时 - 您只需调用它即可。这可以避免您多次重复打印相同的代码。

另一件事是,您可以将struct playertypedef设置为更具可读性。在这种情况下,player 本身是可读的,但在某些情况下,typedef 有帮助。但这就是 debatable

此外,main() 应该是(操作系统期望返回一个整数)

int main(void){
..
return 0;
}

您可以将函数 printPlayernew_player 的声明移至 header 本身。这更有意义。

另一件事是使用合适的名称。 structs.h 对于头文件来说不是一个好名字。这个项目中不会有任何struct头文件吗?保留名称 Player.hGame.h。这更具可读性。

使用 header 防护

#ifndef PLAYER_H 
#define PLAYER_H


struct weapon {
char name[30];
int damage;
int durability;
};

struct player {
int health;
int armor_level;
int currency;
struct weapon player_weap;
};

#endif

关于c - 寻找改进此代码的方法或者是否有任何我不应该做的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47862276/

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