- 383 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 16:51:19.01 ID:ZnRwde8F.net]
- >>370
[補足] マクロ引数が二重に評価されてしまうのを防ぐため、マクロ作者が 気を利かせたつもりで次のようなマクロを書いたとする: #define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } 作者の意図としては、 char *ptr1, *ptr2; b(*ptr1++, *ptr2++); のような場合にも正しく動作するようにしたいということで、 この場合は、*ptr1++, *ptr2++ は、それぞれ1回ずつ評価されるので、 ptr1, ptr2 は、それぞれ 1ずつ前に進むので、アプリ作者の意図を 組むことが出来る。 一方、使う側が命名規約に従わず、アプリのローカル変数で_x,_yを定義し、 int _x=1; int _y=2; b(_y,_x); とすると、このマクロは誤動作し、 int x=1; int y=2; b(y,x); と書いたときと結果が変わってくる。
|

|