iOS #pragma clang

2017-08-07  本文已影响41人  Jaly_xxx

#pragma clang

1、 #pragma clang diagnostic

使用这个指令可使编译器 禁用、开启、改变代码在编译中出现的错误或警报。例如:你可以在方法前使用编译指令,取消方法中的警报。

1)#pragma clang diagnostic ignored

#pragma clang diagnostic ignored "-Wname"
忽略名称为 name 引起的警报,编译器不再提示警报信息。例如 “unused”。

2) #pragma clang diagnostic warning

#pragma clang diagnostic warning "-Wname"
与上一条相反,对于由 name 引起的警报。编译器将给出警报提示。

3)#pragma clang diagnostic error

#pragma clang diagnostic error "-Wname"
代码出现 name 所指的问题,编译器提示“Error”,编译不过。

4)#pragma clang diagnostic push, #pragma clang diagnostic pop

#pragma clang diagnostic push
#pragma clang diagnostic pop
#pragma clang diagnostic push 编译器对哪些错误给警报提示,哪些错误忽略警报提示,将此刻的状态存储起来,后续可将此设置状态复原。
#pragma clang diagnostic pop 恢复刚才利用 #pragma clang diagnostic push 存储的状态。

2、使用例子


#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
void foo1( void )
{
    __unused char c = (char) 'ab';
}
#pragma clang diagnostic pop

void foo2( void )
{
    __unused char c = (char) 'ab';
}

#pragma clang diagnostic ignored "-Wmultichar"   // 指令 A
#pragma clang diagnostic push                    // 指令 B
void foo3( void )
{
#pragma clang diagnostic error "-Wmultichar"     // 指令 C
    /* Here, the diagnostic message is elevated to error severity. */ 
    char c = (char) 'ab';
}     
#pragma clang diagnostic pop                     // 指令 D

void foo4( void )
{
    __unused char c = (char) 'ab';
}  

3 常用示例

  1. 对于编译器不能识别的方法,取消编译器警报
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
    // 需要禁用警告的代码
    [self performSelectorOnMainThread:@selector(updatePaddingConstraints) withObject:nil waitUntilDone:NO];
#pragma clang diagnostic pop
    

Reference

上一篇下一篇

猜你喜欢

热点阅读