質問: Cプログラミング初心者です。 関数形式マクロdiff(x,y)を定義することはできてますかね?
回答: ご質問のような使い方 diff(sqr(x), sqr(y)) なら #define deff(x, y) (x > y)?x - y : y - x でも構いませんが、 #define diff(x,y) (((x) > (y))?(x) - (y) : (y) - (x)) としておいた方が安全です 例えば diff(1-2,2-1); などと書いた場合、前者では (1-2 > 2-1)?1-2 - 2-1 : 2-1 - 1-2 と展開されるため、 (-1 > 1) ? -4 : -2 というおかしな計算になってしまいます 後者なら (((1-2) > (2-1))?(1-2) - (2-1) : (2-1) - (1-2)) と展開されるため、 ((-1 > 1)?-2 : 2) と正しく計算されます