1

これはエラーではありませんが、取り除きたい警告がいくつかあります。

OSErr err = AudioUnitInitialize(toneUnit);
NSAssert1(err == noErr, @"Error initializing unit: %ld", err);

私が得ている警告は次のとおりFormat specifies type 'long' but the argument has type 'OSErr' (aka 'short')です。明らかに、longの代わりに使用してこれを変更できますOSErrが、なぜエラーが発生するのか疑問に思っていました。これはアップキャストなので、問題は起こらないはずだと思いました。

誰でも説明できますか?

4

2 に答える 2

0

NSAssert1はC の制約内で実装される可変引数関数であるため、内部でキャストを実行できません。関数の vararg セクションで渡された引数の型を見つけることはできません。Objective-C コンパイラは、呼び出しを行う前にデフォルトの型昇格を実行しますが、デフォルトではではなく にshort変換されます。そのため、明示的なキャストを挿入するか、別の書式指定子を使用する必要があります。intlong

于 2012-08-02T12:51:14.633 に答える
0

使用する

NSAssert1(err == noErr, @"Error initializing unit: %hd", err);

また

NSAssert1(err == noErr, @"Error initializing unit: %ld", (long)err);

代わりは。

于 2012-08-02T12:50:40.263 に答える