次のようなマクロをCで定義する必要があります。
swap_m(t,x,y)
タイプの2つの引数x
を交換します。y
t
x
設定方法とy
入力方法がよくわかりませんt
。それは本当に簡単かもしれませんが、私はCに不慣れで、これを行う方法がよくわかりません。
試す
#define SWAP(x, y, t) \
do {
t __temp = x;
x = y;
y = __temp;
} while (0)
使用
int a = 1, b = 2;
SWAP(a, b, int);
memcpyとsizeof演算子を利用できます。
void __swap(void* a, void* b, size_t size)
{
void* temp= malloc(size);
memcpy(temp,a,size);
memcpy(a,b,size);
memcpy(b,temp,size);
free(temp);
}
#define swap(a,b) __swap(&a,&b,sizeof(a))
タイプをt
、たとえばとして渡すだけswap_m(int, x, y)
です。
t
次に、マクロでタイプの変数を定義できます。
#define swap_m(TYPE, X, Y) do { TYPE ___tmp = X; X = Y; Y = ___tmp; } while(0)
#define SWAP(a,b) { __typeof__(a) temp; temp = a; a = b; b = temp; }