« 2007年1月7日 - 2007年1月13日 | トップページ | 2007年1月28日 - 2007年2月3日 »

2007年1月22日 (月)

swap

C言語でのswapの実装を汎用的に書くのに挑戦してみた。

#include <stdlib.h>
#include <string.h>

#define swap(a, b)\
    do {\
        void *tmp = malloc(sizeof(a));\
        memcpy(tmp, &a,  sizeof(a));\
        memcpy(&a,  &b,  sizeof(a));\
        memcpy(&b,  tmp, sizeof(a));\
        free(tmp);\
    } while(0)

コストは大きいが、どんな型同士でも一つのマクロでスワップできる。
しかし、型チェックはできない。


おまけ
必要な型のswap用の関数を作成。

#define swap(type)\
    void type##_swap(type *a, type *b)\
    {\
        type tmp = *a;\
        *a       = *b;\
        *b       = tmp;\
    }

| | コメント (0) | トラックバック (0)

« 2007年1月7日 - 2007年1月13日 | トップページ | 2007年1月28日 - 2007年2月3日 »