• ベストアンサー

二つの値を交換する関数形式マクロ

type型の二つの値を交換する関数形式マクロの定義について、 どなたか教えて頂けませんか?   change(type, a, b) たとえば、int型の変数a, bの値が10, 20である場合、 change(int, 10, 20)を呼び出した後は、a, bには20と10が 格納される、というものです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#208124
noname#208124
回答No.2

よくあるマクロ #define change(type, a, b) { a ^= b; b ^= a; a^= b;} 参照渡しで同じ意味の関数作っちゃうと a == b のときダメ、とか type見てないじゃん、とか 浮動小数点で使えないじゃん、とか

参考URL:
http://ja.wikipedia.org/wiki/XOR%E4%BA%A4%E6%8F%9B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

よくあるマクロは #define change(type a, b) do { type _ = a; a = b; b = _; } while (0) かな. 変数名がかぶったら知らん. あと, change(int, 10, 20) とかいう呼出をしてみたりこれを式文で使ったりするとこけるけどそれも知らん.

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

よくわかりませんが、こういうことでしょうか。 #include <stdio.h> #define change(type, a, b) { type t; t = a, a = b, b = t; } int main(void) { int a = 10, b = 20; change(int, a, b); printf("%d %d\n", a, b); return 0; }

関連するQ&A