FrontPage > C/C++ > X Toolkit > インクリメントについて
Xtを含め、数多くのマクロが存在するのでインクリメント等の処理を関数(マクロ)内で行わない方が良い。
元のソース: XtSetArg(myArgs[i], XmNx, 10); i++; プリプロセス処理後[gcc -E]: ((void)( (myArgs[i]).name = (((char*)&XtStrings[885])), (myArgs[i]).value = (XtArgVal)(10) )); i++;
その為、内部でインクリメントを記述すると > XtSetArg(myArgs[i++], XmNx, 10); プリプロセス処理後にはインクリメントを2回してしまう。 > ((void)( (myArgs[i++]).name = (((char*)&XtStrings[885])), (myArgs[i++]).value = (XtArgVal)(10) ));
1回インクリメントしているつもりが、 展開後には2回インクリメントされていると意図しない結果となってしまう。