visual c++ 2008のバグ?
visual c++ 2008 Express Editionを使ってC++言語でプログラミングしているのですが、どうしても理解できない動作に困っています。
int putPiece(int x, int y, int typ, int dir, int blo, int col){
・・・
if(canPlacePiece(x, y, typ, dir, blo, col) == true){
・・・
}
}
int canPlacePiece(int x, int y, int typ, int dir, int blo, int col){
・・・ //変数宣言
printf("%d,",x); //デバックのため
・・・
}
かなり省略してますが、上のような感じで、パズルのピースを置くための関数putPiece内で引数をそのまま関数canPlacePiece(ピースを置けるか調べる関数)に渡します。関数canPlacePieceはピースが置けるならtrueを返し、置けないならfalseを返すようにしてあり、関数putPiece内のif文内にはピースを置くための処理が書かれています。
問題はこの関数putPieceを呼び出した際に、ループ文があるわけでもないのにcanPlacePiece関数が何回も呼び出された感じの動作をするということです。たとえばputPiece関数の引数xに1を入れて呼び出したとき、canPlacePiece関数内printf文でxの中身1が1回だけ表示されるだけのはずが、「1,2,2,2,2,2,・・・」と表示されます。このようにcanPlacePiece関数が引数を変えて何回も呼び出されているような動作をしていますが、この関数を抜けるとピースを置く処理をしてreturn trueするか、置けずにreturn falseしてputPiece関数を抜けるだけなので、こんな動作はありえないはずなんです。
これはvisual c++ 2008のバグ? それともC++の仕様? それともまだ見落としているところがある?
補足
Int(CCur([数量1]*[数量2]*100)) / 100 のCCurは関数ですか?自分のACCESS2000では使用できないみたいです…。 因数は倍精度浮動小数点数型ですが演算結果には形式が指定できないみたいです。