gpt4 book ai didi

C Lib 设计 - 结构和内存管理 [最佳实践]

转载 作者:太空狗 更新时间:2023-10-29 15:20:23 24 4
gpt4 key购买 nike

<分区>

所以,我是一个尝试学习 C 的 C# 人。作为第一个(个人)项目,我正在尝试编写一个基本的坐标几何库。

问题:在幕后的堆上分配内存而不是让以库为目标的程序员来分配内存是否又是最佳 C 编程实践?

例如,我的“点”结构和相关方法:

点.h

/* A basic point type. */
typedef struct point
{
float x;
float y;
float z;
char *note;
}point;

/* Initializes a basic point type. [Free with free_point method] */
point *create_point(float pos_x, float pos_y, float pos_z, char *_note);
/* Frees a point type. */
void free_point(point *_point);
/* Finds the midpoint between two points. */
point *midpoint(point *pt1, point *pt2);

点.c

#include "point.h"

/* Initializes a basic point type. [Free with free_point method] */
point *create_point(float pos_x, float pos_y, float pos_z, char *_note)
{
point *p;
size_t notelen = strlen(_note);

p = (point*)malloc(sizeof(point));
p->x = pos_x;
p->y = pos_y;
p->z = pos_z;

p->note = (char*)calloc(notelen + 1, sizeof(char));
strcpy_s(p->note, notelen + 1, _note);

return p;

}
/* Frees a point type. */
void free_point(point *_point)
{
free (_point->note);
free (_point);
}

/* Creates a midpoint between two points. */
point *midpoint(point *pt1, point *pt2)
{
float mid_x = (pt1->x + pt2->x) * 0.5f;
float mid_y = (pt1->y + pt2->y) * 0.5f;
float mid_z = (pt1->z + pt2->z) * 0.5f;

point *p = create_point(mid_x, mid_y, mid_z, "Midpoint");
return p;
}

请注意,我通过 create_point() 方法在堆上为实现/使用我的库的任何人创建了结构“点”(老实说,这个项目只是为了我和学习,不过......)。这是不好的做法吗?感觉就像我在强制用户以某种方式编程。 midpoint() 方法也是如此。同样,您必须使用指向“点”结构的指针。

我无法在 SO 上找到关于 C 库设计的确切问题,但如果适用,请指出正确的方向。

谢谢。

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