C++ if文にマクロ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
マクロ初めて

C++ if文にマクロ

#1

投稿記事 by マクロ初めて » 2年前

本を読みながらゲームを制作中なのですが、マクロを使うところが出てきて詰まっています。

コード:

#define RECTANGLE_WIDTH(r) ((r).right-(r).left); //RECTの高さを計算
というものがあって、

コード:

if (RECTANGLE_WIDTH(*rectangle) < (MIN_ROOM_SIZE + 3) * 2 + 1)  {
    //処理
}
という風に書きたいのですが、RECTANGLE_WHIDTHのところでエラーをはいてしまいます。
エラー内容は「')'が必要です」となっています。

他に

コード:

int b = RECTANGLE_WIDTH(*rectangle) - MIN_ROOM_SIZE - 4; //MIN_ROO_SIZEは定数
という処理も書いているのですが、こちらはちゃんと動いています。
なので、if文での使い方が間違っているのかなと考えました。

定数の中身は動いている処理がある以上関係ないと考え詳細は省いていますが、必要な場合はお手数ですが指示を下さい。詳細を追記します。

また、参考にしている本が古いものなので、もっといい書き方などございましたら、そちらもお願いしたく思います。

どうぞよろしくお願いします。

maru
記事: 150
登録日時: 8年前

Re: C++ if文にマクロ

#2

投稿記事 by maru » 2年前

マクロの最後のセミコロン(;)が余分。

マクロ初めて

Re: C++ if文にマクロ

#3

投稿記事 by マクロ初めて » 2年前

ありがとうございました。
普通に行けましたorz

知ってないと癖でつけてしまいまいますし、気付けないものですね…

maru
記事: 150
登録日時: 8年前

Re: C++ if文にマクロ

#4

投稿記事 by maru » 2年前

一応書いておくと

コード:

int b = RECTANGLE_WIDTH(*rectangle) - MIN_ROOM_SIZE - 4; //MIN_ROO_SIZEは定数
は、コンパイルエラーになっていないだけで、意図したとおりには動作していないはずです。

マクロを展開すると、

コード:

int b = ((*rectangle).right-(*rectangle).left);  - MIN_ROOM_SIZE - 4; //MIN_ROO_SIZEは定数
となるわけで、b には *rectangle の幅が入ります。後ろの - MIN_ROOM_SIZE - 4; は効果のない文となります。
エラーではないけど、警告が出ているのではないでしょうか?
マクロ初めて さんが書きました:もっといい書き方などございましたら、そちらもお願いしたく思います。
とのことなので、アドバイスを差し上げると、マクロを使用せず、インライン関数にした方がよいでしょう。

コード:

inline int RECTANGLE_WIDTH(RECT r)  { return r.right - r.left; }

返信

“C言語何でも質問掲示板” へ戻る