寻找方法来改善这个代码,或者如果有什么我不应该做的
试图学习C,所以我做了这个简短的程序来尝试和模仿类。这个代码有什么我不应该用C或者任何可以像最佳实践或其他任何方式改进它的方法?寻找方法来改善这个代码,或者如果有什么我不应该做的
structs.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;
}
回答:
这只是喜好的问题,但是当我使用结构喜欢的事情,我一直在做typedef
给自己一个新的数据类型。它使编写代码变得更容易,并帮助我更好地理解它正在发生的事情。
typedef struct { char name[30];
int damage;
int durability;
} Weapon;
typedef struct {
int health;
int armor_level;
int currency;
Weapon player_weap;
} Player;
因此,而不是声明函数像
struct player new_player();
,你会做这样的
Player new_player();
它模拟带班好多工作的过程中,IMO。此外,无论谁告诉你使用void main()
是非常失去联系。除非你正在编写内核或微控制器或其他东西,否则千万不要使用它。对于几乎所有的编程环境,它都是int main(void)
。如果您的程序已成功运行,请确保您的号码为return 0;
。
回答:
那么有几点: - 如果结构不是太大,你可以这样做。 这是完全正确的。
malloc
在计算上比从函数返回时复制变量更昂贵。如果结构尺寸较大,那么应该是malloc
它。这样你就不会在堆栈中使用大量的内存。
您应该尝试考虑让代码可重用。你可以保留一个打印结构的函数。就像(为了获得一个struct实例一样,你保存了一个独立的函数)。
void printPlayer(struct player p){ ...
}
这样,任何时候你试图打印它 - 你只需要调用它。这样可以避免重复多次打印相同的代码。
另一件事是,你可以typedef
struct player
更可读。在这种情况下,player
本身可读,但在某些情况下,typedef
有帮助。但是,那是debatable。
另外,main()
应该是(操作系统要求使用整回)
int main(void){ ..
return 0;
}
您可以将功能printPlayer
或new_player
至头本身的声明。这更有意义。
另一件事是使用合适的名称。structs.h
不是头文件的好名字。在这个项目中不会有任何struct
头文件?保留名称Player.h
或Game.h
。这更可读。
将标题警卫
#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
以上是 寻找方法来改善这个代码,或者如果有什么我不应该做的 的全部内容, 来源链接: utcz.com/qa/260896.html