ですから、私はC#の人で、Cの学習に取り組んでいます。最初の(個人的な)プロジェクトとして、基本的な座標ジオメトリライブラリを作成しようとしています。
質問:ライブラリをターゲットにしているプログラマーにメモリを割り当てるのではなく、バックグラウンドでヒープにメモリを割り当てるのがCプログラミングのベストプラクティスですか?
たとえば、私の「ポイント」構造体と関連メソッド:
point.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);
point.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()メソッドを使用して、自分のlibを実装/使用する人のためにヒープ上に構造体'point'を作成していることに注意してください(正直なところ、このプロジェクトは私と学習のためだけのものです...)。これは悪い習慣ですか?ユーザーに特定の方法でプログラミングを強いているような気がします。同じことがmidpoint()メソッドにも当てはまります。ここでも、「ポイント」構造体へのポインタを使用する必要があります。
SOでのCライブラリの設計に関する正確な質問を見つけることができませんでしたが、該当する場合は正しい方向に向けてください。
ありがとう。