寻找方法来改善这个代码,或者如果有什么我不应该做的

试图学习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){ 

...

}

这样,任何时候你试图打印它 - 你只需要调用它。这样可以避免重复多次打印相同的代码。

另一件事是,你可以typedefstruct player更可读。在这种情况下,player本身可读,但在某些情况下,typedef有帮助。但是,那是debatable。

另外,main()应该是(操作系统要求使用整回)

int main(void){ 

..

return 0;

}

您可以将功能printPlayernew_player至头本身的声明。这更有意义。

另一件事是使用合适的名称。structs.h不是头文件的好名字。在这个项目中不会有任何struct头文件?保留名称Player.hGame.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

回到顶部