-1

このチュートリアル(純粋なc ++)に従って、Objective-cおよびCで.objローダーを作成しています。fscanf()しかし、設定する変数のメモリアドレスを送信しなくても(値のみを送信して)、関数が正常に実行されることに気付きました。これについての説明はありますか?

 Vec2 *uv;
 fscanf(file, "%f %f\n", uv.x, uv.y);
 [tempUVs addObject:uv];

パラメータuv.xとuv.yにはアンパサンドがないことに注意してください。

4

1 に答える 1

6

あなたがそれをするとき、それは未定義の振る舞いです。何かが起こる可能性があります-クラッシュする可能性があります、正しく実行される可能性があります、メモリを静かに破壊している間に正しく実行されているように見える可能性があります、またはハードドライブを消去する可能性があります。これらはすべて、言語標準に従って許可されている動作です。

適切なコンパイラを使用してコンパイルしている場合は、警告レベルを上げることができ(たとえば、-WallGCCまたはClangを使用して)、関数の/ファミリに-Wextra -pedantic間違ったパラメータを渡したときに警告を発することができます。具体的には、このオプションはこの種のことを警告します(の一部として含まれています)。*scanf*printf-Wformat-Wformat-Wall

于 2013-01-17T16:17:07.427 に答える