それは、他の人のコードがそれらの型で何をするかによって異なります。あなたのライブラリのユーザーとして、some_structure_t が構造体へのポインターではなく構造体であると仮定すると、次のようにするかもしれません。
some_structure_t *p;
p = malloc( sizeof *p);
memcpy( p, &another_p, sizeof *p);
some_structure_t
組み込みプログラマーとしての私の背景かもしれませんが、それを使用するコードについてもっと知りたいです。真に抽象化された型であり、エンド ユーザー コードでパラメーターまたは戻り値としてのみ使用される場合でも、その型をサポートするライブラリで処理する必要があります。次のコードを見た場合、私はダブルテイクを行います。
some_structure_t some_function( some_structure_t foo)
{
some_structure_t retval;
retval = malloc( sizeof *retval); // assigning pointer to struct?
retval->member = foo->member; // using -> instead of .?
return retval; // returning potentially large structure on stack?
}
おそらくこれが最大のものです - あるものsome_structure_t
から別のものへのコピーです。int
か か のfloat
場合、struct
書き込みfoo = bar
はコピーを作成します。some_structure_t
が構造体へのポインタとして定義されている場合、現在はfoo
とbar
同じオブジェクトを指しています。多分それはあなたが望んでいることですが、私には危険に思えます.
MISRA はポインタである typedef について何か言いたいことがあるのだろうか。