構造体のコピーを作るとき、memcpy関数を使用して複製をつくるようにコードを書いている人も多いと思います。
gccはANSI準拠なので、代入式で構造体の複製を作れるのはしっているでしょうか?
以下にC言語サンプルソースを記します。
struct_cp.c (改行コードLF)
#include <stdio.h>
#include <string.h>
struct INT_MEMBERS {
int a;
int b;
int c;
};
int main(void)
{
struct INT_MEMBERS src, dest;
src.a = 1;
src.b = 2;
src.c = 3;
dest = src; /* struct copy */
printf("dest.a = %d\n", dest.a);
printf("dest.b = %d\n", dest.b);
printf("dest.b = %d\n", dest.c);
return 0;
}
上記のC言語サンプルコードのコンパイルと実行結果を記します。
$ gcc struct_cp.c -o struct_cp $ ./struct_cp dest.a = 1 dest.b = 2 dest.b = 3
memcpyを使って構造体のコピーを作らない理由は、バグを少なくするためです。
誤ってmemcpyのsrc,destに構造の異なる構造体を指定しコピーした場合は、メモリ破壊をしてしまいます。
しかし、代入式の場合であれば、コンパイル時にエラーとなるためコードのミスを簡単に見つけることができます。
以上、構造体のコピーはmemcpyを使わない!でした。