2

私はここでちょっと新しいので、何か間違ったことをしている場合はご容赦ください。これを投稿する前に少し検索しましたが、結果は得られませんでした。というわけで、本題に移ります。AI エージェントの挙動がおかしかったときにエラーが発生したのでprintf、何が起こっているのかを調べるためにいくつかの を起草しました。

単純な除算の間違った結果であることが判明しました。

#define WORLD_HEIGHT 42
#define VIEWPOINT_CONSTANT 9

printf ("%d/%d=%d\n", WORLD_HEIGHT, VIEWPOINT_CONSTANT, WORLD_HEIGHT/VIEWPOINT_CONSTANT);

出力:

42/9=6

次に、コンパイラなどをチェックするために次のことを行いました。

printf ("%d/%d=%d\n", 42, 9, 42/9);

出力:

42/9=4        

これが Xcode のバグなのか、C++ の何かなのかはわかりません (後者であるとは思えませんが、前者もかなりありそうにありません)。何も見落としていないことを確認するために、定数自体をprintf's に入れました。

誰かがこの問題の原因や解決方法について手がかりを持っている場合 (#define数値に置き換えるのではなく、 's を保持したまま)、大歓迎です。

乾杯!

4

1 に答える 1

4

私の推測では、実際のコードを示しているわけではなく、実際に持っているのは次のようなものです。

#define WORLD_HEIGHT 42
#define VIEWPOINT_CONSTANT 8+1

printf ("%d/%d=%d\n", WORLD_HEIGHT, VIEWPOINT_CONSTANT, WORLD_HEIGHT/VIEWPOINT_CONSTANT);

これにより、表示されている結果が得られます。これは42/8+1、 と同じではないためです。これはと42/9評価されるため、ではなくの値が得られます。これは、括弧を使用して必要な評価順序を強制することで修正できます。(42/8)+15+164

#define VIEWPOINT_CONSTANT (8+1)

または、プリプロセッサ マクロではなく、定数を定義するためのより適切な方法を使用します。

const int WORLD_HEIGHT = 42;
const int VIEWPOINT_CONSTANT = 8+1;

(上記の宣言により問題がなくなり、括弧が不要になることに注意してください。)

今日学んだ教訓:

  • sでは常に括弧を使用します#define(またはconst、これは 1983 年ではなく 2013 年であるため、 を使用することをお勧めします)
  • 常に実際のコードを StackOverflow に投稿してください。
于 2013-10-02T10:17:15.190 に答える