NSAssert1的参数类型错误



这并没有给我一个错误,但我想消除几个警告。

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来改变这一点,但我想知道为什么会出现错误。这是一个升级,所以我认为它不应该引起任何问题。

有人能解释一下吗?

由于NSAssert1是在C的约束下实现的变元函数,因此它无法在内部执行强制转换:无法找到函数的vararg部分中传递的参数的类型。Objective-C编译器在进行调用之前会执行默认的类型提升,但short会转换为int,而不是默认的long。这就是为什么您应该插入显式转换,或者使用不同的格式说明符。

使用

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

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

相反。

相关内容

  • 没有找到相关文章

最新更新