C/C++ の悪い、または危険な関数のようなマクロの例には事欠きません。
#define SQUARE(x) x * x
printf("%d", SQUARE(4)); //16
printf("%d", SQUARE(3+1)); //7
#undef SQUARE
#define SQUARE(x) (x) * (x)
printf("%d", 36/4); //9
printf("%d", SQUARE(6)/SQUARE(2)); //36
#undef SQUARE
#define SQUARE(x) ((x) * (x))
int x = 3;
++x;
printf("%d", SQUARE(x)); //16
int y = 3;
printf("%d", SQUARE(++y)); //?
#undef SQUARE
関数のようなマクロの問題を考えると、それらの適切な/賢明な/推奨される使用例は何ですか?
関数のようなマクロが関数よりも好ましい場合はありますか?
これには本当に良いケースがいくつかあるにちがいないと思います。