Xcode消除编译器警告

最近在部分库的源码中看到了#Pragma类似于下面的这种用法

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic pop

查了下ignored 相关语句的作用是忽略某种编译器警告,最终效果就是去除了黄色感叹号,对于治疗强迫症来说, 有奇效.

push和pop相关语句的作用是用于保存和恢复编译器的状态, 如果不添加这条两条语句, 这将会使得ignored语句一直有效.

下面列举了参数和错误提示对应的列表, 来源

| Semantic  Warnings                       |                                          |
| ---------------------------------------- | ---------------------------------------- |
| Warning                                  | Message                                  |
| -WCFString-literal                       | input conversion stopped due to an input byte  that does not belong to the input codeset UTF-8 |
| -WNSObject-attribute                     | __attribute ((NSObject)) may be put on a  typedef only, attribute is ignored |
| -Wabstract-vbase-init                    | initializer for virtual base class %0 of  abstract class %1 will never be used |
| -Waddress-of-array-temporary             | pointer is initialized by a temporary array,  which will be destroyed at the end of the full-expression |
| -Warc-maybe-repeated-use-of-weak         | "weak %select{variable\|property\|implicit  property\|instance variable}0 %1 may be accessed multiple times in this  %select{function\|method\|block\|lambda}2 and may be unpredictably set to nil  assign to a strong variable to keep the object alive |
| -Warc-non-pod-memaccess                  | %select{destination for\|source of}0 this %1  call is a pointer to ownership-qualified type %2 |
| -Warc-performSelector-leaks              | performSelector may cause a leak because its  selector is unknown |
| -Warc-repeated-use-of-weak               | "weak %select{variable\|property\|implicit  property\|instance variable}0 %1 is accessed multiple times in this  %select{function\|method\|block\|lambda}2 but may be unpredictably set to nil  assign to a strong variable to keep the object alive |
| -Warc-retain-cycles                      | capturing %0 strongly in this block is likely  to lead to a retain cycle |
| -Warc-unsafe-retained-assign             | assigning retained object to unsafe property  object will be released after assignment |
| -Warc-unsafe-retained-assign             | assigning %select{array literal\|dictionary  literal\|numeric literal\|boxed expression\|should not happen\|block literal}0 to  a weak %select{property\|variable}1 object will be released after assignment |
| -Warc-unsafe-retained-assign             | assigning retained object to  %select{weak\|unsafe_unretained}0 %select{property\|variable}1 object will be  released after assignment |
| -Warray-bounds                           | array index %0 is past the end of the array  (which contains %1 element%s2) |
| -Warray-bounds                           | array index %0 is before the beginning of the  array |
| -Warray-bounds                           | 'static' has no effect on zero-length arrays |
| -Warray-bounds                           | array argument is too small contains %0  elements, callee requires at least %1 |
| -Warray-bounds-pointer-arithmetic        | the pointer incremented by %0 refers past the  end of the array (that contains %1 element%s2) |
| -Warray-bounds-pointer-arithmetic        | the pointer decremented by %0 refers before  the beginning of the array |
| -Wassign-enum                            | integer constant not in range of enumerated  type %0 |
| -Watomic-property-with-user-defined-accessor | writable atomic property %0 cannot pair a  synthesized %select{getter\|setter}1 with a user defined  %select{getter\|setter}2 |
| -Wattributes                             | unknown attribute %0 ignored             |
| -Wauto-var-id                            | 'auto' deduced as 'id' in declaration of %0 |
| -Wavailability                           | unknown platform %0 in availability macro |
| -Wavailability                           | overriding method %select{introduced  after\|deprecated before\|obsoleted before}0 overridden method on %1 (%2 vs.  %3) |
| -Wavailability                           | availability does not match previous  declaration |
| -Wavailability                           | overriding method cannot be unavailable on %0  when its overridden method is available |
| -Wavailability                           | feature cannot be  %select{introduced\|deprecated\|obsoleted}0 in %1 version %2 before it was  %select{introduced\|deprecated\|obsoleted}3 in version %4 attribute ignored |
| -Wbad-function-cast                      | cast from function call of type %0 to  non-matching type %1 |
| -Wbitfield-constant-conversion           | implicit truncation from %2 to bitfield  changes value from %0 to %1 |
| -Wbitwise-op-parentheses                 | '&' within '\|'                          |
| -Wbool-conversion                        | "initialization of pointer of type %0 to  null from a constant boolean " "expression |
| -Wbridge-cast                            | %0 cannot bridge to %1                   |
| -Wbridge-cast                            | %0 bridges to %1, not %2                 |
| -Wbuiltin-requires-header                | declaration of built-in function '%0' requires  inclusion of the header stdio.h |
| -Wbuiltin-requires-header                | declaration of built-in function '%0' requires  inclusion of the header setjmp.h |
| -Wbuiltin-requires-header                | declaration of built-in function '%0' requires  inclusion of the header ucontext.h |
| -Wc++-compat                             | %select{\|empty }0%select{struct\|union}1 has  size 0 in C, %select{size 1\|non-zero size}2 in C++ |
| -Wc++11-compat                           | explicit instantiation cannot be 'inline' |
| -Wc++11-compat                           | explicit instantiation of %0 must occur at  global scope |
| -Wc++11-compat                           | explicit instantiation of %0 not in a  namespace enclosing %1 |
| -Wc++11-compat                           | explicit instantiation of %q0 must occur in  namespace %1 |
| -Wc++11-narrowing                        | constant expression evaluates to %0 which  cannot be narrowed to type %1 in C++11 |
| -Wc++11-narrowing                        | type %0 cannot be narrowed to %1 in  initializer list in C++11 |
| -Wc++11-narrowing                        | non-constant-expression cannot be narrowed  from type %0 to %1 in initializer list in C++11 |
| -Wc++98-c++11-compat                     | type definition in a constexpr  %select{function\|constructor}0 is incompatible with C++ standards before  C++1y |
| -Wc++98-c++11-compat                     | use of this statement in a constexpr  %select{function\|constructor}0 is incompatible with C++ standards before  C++1y |
| -Wc++98-c++11-compat                     | init-captures.def  warn_cxx11_compat_init_capture : Warning "initialized lambda captures  are incompatible with C++ standards " "before C++1y |
| -Wc++98-c++11-compat                     | variable declaration in a constexpr  %select{function\|constructor}0 is incompatible with C++ standards before  C++1y |
| -Wc++98-c++11-compat                     | constexpr function with no return statements  is incompatible with C++ standards before C++1y |
| -Wc++98-c++11-compat                     | multiple return statements in constexpr  function is incompatible with C++ standards before C++1y |
| -Wc++98-c++11-compat                     | variable templates are incompatible with C++  standards before C++1y |
| -Wc++98-compat                           | substitution failure due to access control is  incompatible with C++98 |
| -Wc++98-compat                           | %select{anonymous struct\|union}0 member %1  with a non-trivial %select{constructor\|copy constructor\|move constructor\|copy  assignment operator\|move assignment operator\|destructor}2 is incompatible  with C++98 |
| -Wc++98-compat                           | enumeration type in nested name specifier is  incompatible with C++98 |
| -Wc++98-compat                           | static data member %0 in union is incompatible  with C++98 |
| -Wc++98-compat                           | default template arguments for a function  template are incompatible with C++98 |
| -Wc++98-compat                           | scalar initialized from empty initializer list  is incompatible with C++98 |
| -Wc++98-compat                           | befriending %1 without  '%select{struct\|interface\|union\|class\|enum}0' keyword is incompatible with  C++98 |
| -Wc++98-compat                           | use of null pointer as non-type template  argument is incompatible with C++98 |
| -Wc++98-compat                           | friend declaration naming a member of the  declaring class is incompatible with C++98 |
| -Wc++98-compat                           | non-class friend type %0 is incompatible with  C++98 |
| -Wc++98-compat                           | befriending enumeration type %0 is  incompatible with C++98 |
| -Wc++98-compat                           | use of non-static data member %0 in an  unevaluated context is incompatible with C++98 |
| -Wc++98-compat                           | friend function %0 would be implicitly  redefined in C++98 |
| -Wc++98-compat                           | %select{class template\|class template  partial\|variable template\|variable template partial\|function template\|member  function\|static data member\|member class\|member enumeration}0 specialization  of %1 outside namespace %2 is incompatible with C++98 |
| -Wc++98-compat                           | reference initialized from initializer list is  incompatible with C++98 |
| -Wc++98-compat                           | redundant parentheses surrounding address  non-type template argument are incompatible with C++98 |
| -Wc++98-compat                           | initialization of initializer_list object is  incompatible with C++98 |
| -Wc++98-compat                           | use of 'template' keyword outside of a  template is incompatible with C++98 |
| -Wc++98-compat                           | non-type template argument referring to  %select{function\|object}0 %1 with internal linkage is incompatible with C++98 |
| -Wc++98-compat                           | use of 'typename' outside of a template is  incompatible with C++98 |
| -Wc++98-compat                           | passing object of trivial but non-POD type %0  through variadic %select{function\|block\|method\|constructor}1 is incompatible  with C++98 |
| -Wc++98-compat                           | goto would jump into protected scope in C++98 |
| -Wc++98-compat                           | constructor call from initializer list is  incompatible with C++98 |
| -Wc++98-compat                           | 'auto' type specifier is incompatible with  C++98 |
| -Wc++98-compat                           | delegating constructors are incompatible with  C++98 |
| -Wc++98-compat                           | 'constexpr' specifier is incompatible with  C++98 |
| -Wc++98-compat                           | inheriting constructors are incompatible with  C++98 |
| -Wc++98-compat                           | explicit conversion functions are incompatible  with C++98 |
| -Wc++98-compat                           | switch case would be in a protected scope in  C++98 |
| -Wc++98-compat                           | '%0' type specifier is incompatible with C++98 |
| -Wc++98-compat                           | indirect goto might cross protected scopes in  C++98 |
| -Wc++98-compat-pedantic                  | cast between pointer-to-function and  pointer-to-object is incompatible with C++98 |
| -Wc++98-compat-pedantic                  | implicit conversion from array size expression  of type %0 to %select{integral\|enumeration}1 type %2 is incompatible with  C++98 |
| -Wcast-align                             | cast from %0 to %1 increases required  alignment from %2 to %3 |
| -Wcast-of-sel-type                       | cast of type %0 to %1 is deprecated use  sel_getName instead |
| -Wchar-subscripts                        | array subscript is of type 'char'        |
| -Wconditional-uninitialized              | variable %0 may be uninitialized when  %select{used here\|captured by block}1 |
| -Wconstant-logical-operand               | use of logical '%0' with constant operand |
| -Wconstexpr-not-const                    | 'constexpr' non-static member function will  not be implicitly 'const' in C++1y add 'const' to avoid a change in behavior |
| -Wconsumed                               | state of variable '%0' must match at the entry  and exit of loop |
| -Wconsumed                               | parameter '%0' not in expected state when the  function returns: expected '%1', observed '%2' |
| -Wconsumed                               | argument not in expected state expected '%0',  observed '%1' |
| -Wconsumed                               | invalid invocation of method '%0' on a  temporary object while it is in the '%1' state |
| -Wconsumed                               | return state set for an unconsumable type '%0' |
| -Wconsumed                               | consumed analysis attribute is attached to  member of class '%0' which isn't marked as consumable |
| -Wconsumed                               | invalid invocation of method '%0' on object  '%1' while it is in the '%2' state |
| -Wconsumed                               | return value not in expected state expected  '%0', observed '%1' |
| -Wconversion                             | implicit conversion discards imaginary  component: %0 to %1 |
| -Wconversion                             | non-type template argument with value '%0'  converted to '%1' for unsigned template parameter of type %2 |
| -Wconversion                             | implicit conversion loses floating-point  precision: %0 to %1 |
| -Wconversion                             | implicit conversion loses integer precision:  %0 to %1 |
| -Wconversion                             | non-type template argument value '%0'  truncated to '%1' for template parameter of type %2 |
| -Wconversion                             | implicit conversion turns vector to scalar: %0  to %1 |
| -Wconversion                             | implicit conversion turns floating-point  number into integer: %0 to %1 |
| -Wcovered-switch-default                 | default label in switch which covers all  enumeration values |
| -Wcustom-atomic-properties               | atomic by default property %0 has a user  defined %select{getter\|setter}1 (property should be marked 'atomic' if this  is intended) |
| -Wdangling-field                         | initializing pointer member %0 with the stack  address of parameter %1 |
| -Wdangling-field                         | binding reference %select{\|subobject of  }1member %0 to a temporary value |
| -Wdangling-field                         | binding reference member %0 to stack allocated  parameter %1 |
| -Wdangling-initializer-list              | array backing the initializer list will be  destroyed at the end of %select{the full-expression\|the constructor}0 |
| -Wdelete-incomplete                      | deleting pointer to incomplete type %0 may  cause undefined behavior |
| -Wdelete-non-virtual-dtor                | delete called on %0 that is abstract but has  non-virtual destructor |
| -Wdelete-non-virtual-dtor                | delete called on %0 that has virtual functions  but non-virtual destructor |
| -Wdeprecated                             | access declarations are deprecated use using  declarations instead |
| -Wdeprecated                             | definition of implicit copy  %select{constructor\|assignment operator}1 for %0 is deprecated because it has  a user-declared %select{copy %select{assignment  operator\|constructor}1\|destructor}2 |
| -Wdeprecated                             | dynamic exception specifications are  deprecated |
| -Wdeprecated-increment-bool              | incrementing expression of type bool is  deprecated |
| -Wdeprecated-objc-isa-usage              | assignment to Objective-C's isa is deprecated  in favor of object_setClass() |
| -Wdeprecated-objc-isa-usage              | direct access to Objective-C's isa is  deprecated in favor of object_getClass() |
| -Wdeprecated-objc-pointer-introspection  | bitmasking for introspection of Objective-C  object pointers is strongly discouraged |
| -Wdeprecated-objc-pointer-introspection-performSelector | warn_objc_pointer_masking.Text           |
| -Wdeprecated-writable-strings            | dummy warning to enable -fconst-strings  |
| -Wdirect-ivar-access                     | instance variable %0 is being directly  accessed |
| -Wdistributed-object-modifiers           | conflicting distributed object modifiers on  return type in implementation of %0 |
| -Wdistributed-object-modifiers           | conflicting distributed object modifiers on  parameter type in implementation of %0 |
| -Wdivision-by-zero                       | division by zero is undefined            |
| -Wdivision-by-zero                       | remainder by zero is undefined           |
| -Wdocumentation                          | parameter '%0' not found in the function  declaration |
| -Wdocumentation                          | not a Doxygen trailing comment           |
| -Wduplicate-enum                         | element %0 has been implicitly assigned %1  which another element has been assigned |
| -Wduplicate-method-match                 | multiple declarations of method %0 found and  ignored |
| -Wdynamic-class-memaccess                | %select{destination for\|source of\|first  operand of\|second operand of}0 this %1 call is a pointer to dynamic class %2  vtable pointer will be %select{overwritten\|copied\|moved\|compared}3 |
| -Wempty-body                             | switch statement has empty body          |
| -Wempty-body                             | for loop has empty body                  |
| -Wempty-body                             | if statement has empty body              |
| -Wempty-body                             | range-based for loop has empty body      |
| -Wempty-body                             | while loop has empty body                |
| -Wenum-compare                           | comparison of two values with different  enumeration types%diff{ ($ and $)\|}0,1 |
| -Wenum-conversion                        | implicit conversion from enumeration type %0  to different enumeration type %1 |
| -Wexit-time-destructors                  | declaration requires an exit-time destructor |
| -Wexplicit-ownership-type                | method parameter of type %0 with no explicit  ownership |
| -Wextern-c-compat                        | %select{\|empty }0%select{struct\|union}1 has  size 0 in C, %select{size 1\|non-zero size}2 in C++ |
| -Wextern-initializer                     | 'extern' variable has an initializer     |
| -Wfloat-equal                            | comparing floating point with == or != is  unsafe |
| -Wformat                                 | "data argument position '%0' exceeds the  number of data arguments (%1) |
| -Wformat                                 | position arguments in format strings start  counting at 1 (not 0) |
| -Wformat                                 | invalid position specified for %select{field  width\|field precision}0 |
| -Wformat                                 | cannot mix positional and non-positional  arguments in format string |
| -Wformat                                 | values of type '%0' should not be used as  format arguments add an explicit cast to %1 instead |
| -Wformat                                 | format specifies type %0 but the argument has  type %1 |
| -Wformat                                 | zero field width in scanf format string is  unused |
| -Wformat                                 | no closing ']' for '%%[' in scanf format  string |
| -Wformat                                 | format string should not be a wide string |
| -Wformat                                 | format string contains '\\0' within the string  body |
| -Wformat                                 | '%select{*\|.*}0' specified field  %select{width\|precision}0 is missing a matching 'int' argument |
| -Wformat                                 | field %select{width\|precision}0 should have  type %1, but argument has type %2 |
| -Wformat                                 | %select{field width\|precision}0 used with '%1'  conversion specifier, resulting in undefined behavior |
| -Wformat                                 | format string missing                    |
| -Wformat                                 | incomplete format specifier              |
| -Wformat                                 | flag '%0' results in undefined behavior with  '%1' conversion specifier |
| -Wformat                                 | flag '%0' is ignored when flag '%1' is present |
| -Wformat                                 | more '%%' conversions than data arguments |
| -Wformat                                 | length modifier '%0' results in undefined  behavior or no effect with '%1' conversion specifier |
| -Wformat-extra-args                      | data argument not used by format string  |
| -Wformat-invalid-specifier               | invalid conversion specifier '%0'        |
| -Wformat-nonliteral                      | format string is not a string literal    |
| -Wformat-security                        | format string is not a string literal  (potentially insecure) |
| -Wformat-zero-length                     | format string is empty                   |
| -Wgcc-compat                             | GCC does not allow the 'cleanup' attribute  argument to be anything other than a simple identifier |
| -Wglobal-constructors                    | declaration requires a global constructor |
| -Wglobal-constructors                    | declaration requires a global destructor |
| -Wgnu-conditional-omitted-operand        | use of GNU ?: conditional expression  extension, omitting middle operand |
| -Wheader-hygiene                         | using namespace directive in global context in  header |
| -Widiomatic-parentheses                  | using the result of an assignment as a  condition without parentheses |
| -Wignored-attributes                     | 'malloc' attribute only applies to functions  returning a pointer type |
| -Wignored-attributes                     | %0 attribute only applies to  %select{functions\|unions\|variables and functions\|functions and  methods\|parameters\|functions, methods and blocks\|functions, methods, and  classes\|functions, methods, and  parameters\|classes\|variables\|methods\|variables, functions and labels\|fields  and global variables\|structs\|variables, functions and tag types\|thread-local  variables\|variables and fields\|variables, data members and tag types\|types  and namespaces\|Objective-C interfaces}1 |
| -Wignored-attributes                     | '%0' attribute cannot be specified on a  definition |
| -Wignored-attributes                     | __weak attribute cannot be specified on an  automatic variable when ARC is not enabled |
| -Wignored-attributes                     | Objective-C GC does not allow weak variables  on the stack |
| -Wignored-attributes                     | __weak attribute cannot be specified on a  field declaration |
| -Wignored-attributes                     | attribute %0 cannot be applied to  %select{functions\|Objective-C method}1 without return value |
| -Wignored-attributes                     | attribute declaration must precede definition |
| -Wignored-attributes                     | attribute %0 is ignored, place it after  \"%select{class\|struct\|union\|interface\|enum}1\" to apply attribute  to type declaration |
| -Wignored-attributes                     | __declspec attribute %0 is not supported |
| -Wignored-attributes                     | attribute %0 ignored, because it cannot be  applied to a type |
| -Wignored-attributes                     | attribute %0 after definition is ignored |
| -Wignored-attributes                     | %0 attribute ignored                     |
| -Wignored-attributes                     | 'sentinel' attribute only supported for  variadic %select{functions\|blocks}0 |
| -Wignored-attributes                     | 'sentinel' attribute requires named arguments |
| -Wignored-attributes                     | '%0' only applies to  %select{function\|pointer\|Objective-C object or block pointer}1 types type  here is %2 |
| -Wignored-attributes                     | 'nonnull' attribute applied to function with  no pointer arguments |
| -Wignored-attributes                     | %0 attribute can only be applied to instance  variables or properties |
| -Wignored-attributes                     | ibaction attribute can only be applied to  Objective-C instance methods |
| -Wignored-attributes                     | %0 calling convention ignored on variadic  function |
| -Wignored-attributes                     | %0 only applies to variables with static  storage duration and functions |
| -Wignored-attributes                     | %0 attribute argument not supported: %1  |
| -Wignored-attributes                     | #pramga ms_struct can not be used with dynamic  classes or structures |
| -Wignored-attributes                     | transparent union definition must contain at  least one field transparent_union attribute ignored |
| -Wignored-attributes                     | first field of a transparent union cannot have  %select{floating point\|vector}0 type %1 transparent_union attribute ignored |
| -Wignored-attributes                     | 'gnu_inline' attribute requires function to be  marked 'inline', attribute ignored |
| -Wignored-attributes                     | calling convention %0 ignored for this target |
| -Wignored-attributes                     | transparent_union attribute can only be  applied to a union definition attribute ignored |
| -Wignored-attributes                     | %select{alignment\|size}0 of field %1 (%2 bits)  does not match the %select{alignment\|size}0 of the first field in transparent  union transparent_union attribute ignored |
| -Wignored-attributes                     | attribute %0 is already applied          |
| -Wignored-attributes                     | %0 attribute ignored for field of type %1 |
| -Wignored-attributes                     | %0 attribute ignored when parsing type   |
| -Wignored-attributes                     | %0 attribute only applies to  %select{functions\|methods\|properties}1 that return %select{an Objective-C  object\|a pointer\|a non-retainable pointer}2 |
| -Wignored-attributes                     | %0 attribute only applies to  %select{Objective-C object\|pointer}1 parameters |
| -Wignored-attributes                     | attribute %0 is already applied with different  parameters |
| -Wignored-attributes                     | unknown visibility %0                    |
| -Wignored-qualifiers                     | "'%0' type qualifier%s1 on return type  %plural{1:has\|:have}1 no effect |
| -Wignored-qualifiers                     | ARC  %select{unused\|__unsafe_unretained\|__strong\|__weak\|__autoreleasing}0 lifetime  qualifier on return type is ignored |
| -Wimplicit-atomic-properties             | property is assumed atomic by default    |
| -Wimplicit-atomic-properties             | property is assumed atomic when  auto-synthesizing the property |
| -Wimplicit-fallthrough                   | fallthrough annotation in unreachable code |
| -Wimplicit-fallthrough                   | unannotated fall-through between switch labels |
| -Wimplicit-fallthrough                   | fallthrough annotation does not directly  precede switch label |
| -Wimplicit-function-declaration          | implicit declaration of function %0      |
| -Wimplicit-function-declaration          | use of unknown builtin %0                |
| -Wimplicit-retain-self                   | "block implicitly retains 'self'  explicitly mention 'self' to indicate this is intended behavior |
| -Wincompatible-library-redeclaration     | incompatible redeclaration of library function  %0 |
| -Wincomplete-implementation              | method definition for %0 not found       |
| -Winherited-variadic-ctor                | inheriting constructor does not inherit  ellipsis |
| -Winitializer-overrides                  | subobject initialization overrides  initialization of other fields within its enclosing subobject |
| -Winitializer-overrides                  | initializer overrides prior initialization of  this subobject |
| -Wint-to-pointer-cast                    | cast to %1 from smaller integer type %0  |
| -Wint-to-void-pointer-cast               | cast to %1 from smaller integer type %0  |
| -Winvalid-iboutlet                       | IBOutletCollection properties should be  copy/strong and not assign |
| -Winvalid-iboutlet                       | %select{instance variable\|property}2 with %0  attribute must be an object type (invalid %1) |
| -Winvalid-noreturn                       | function %0 declared 'noreturn' should not  return |
| -Winvalid-noreturn                       | function declared 'noreturn' should not return |
| -Wlarge-by-value-copy                    | return value of %0 is a large (%1 bytes)  pass-by-value object pass it by reference instead ? |
| -Wlarge-by-value-copy                    | %0 is a large (%1 bytes) pass-by-value  argument pass it by reference instead ? |
| -Wliteral-conversion                     | implicit conversion from %0 to %1 changes  value from %2 to %3 |
| -Wliteral-range                          | magnitude of floating-point constant too large  for type %0 maximum is %1 |
| -Wliteral-range                          | magnitude of floating-point constant too small  for type %0 minimum is %1 |
| -Wlogical-not-parentheses                | logical not is only applied to the left hand  side of this comparison |
| -Wlogical-op-parentheses                 | '&&' within '\||'                        |
| -Wloop-analysis                          | variable%select{s\| %1\|s %1 and %2\|s %1, %2,  and %3\|s %1, %2, %3, and %4}0 used in loop condition not modified in loop  body |
| -Wloop-analysis                          | variable %0 is  %select{decremented\|incremented}1 both in the loop header and in the loop  body |
| -Wmethod-signatures                      | conflicting parameter types in implementation  of %0: %1 vs %2 |
| -Wmethod-signatures                      | conflicting return type in implementation of  %0: %1 vs %2 |
| -Wmicrosoft                              | extra qualification on member %0         |
| -Wmismatched-method-attributes           | attributes on method implementation and its  declaration must match |
| -Wmismatched-parameter-types             | conflicting parameter types in implementation  of %0%diff{: $ vs $\|}1,2 |
| -Wmismatched-return-types                | conflicting return type in implementation of  %0%diff{: $ vs $\|}1,2 |
| -Wmissing-braces                         | suggest braces around initialization of  subobject |
| -Wmissing-declarations                   | '%0' ignored on this declaration         |
| -Wmissing-field-initializers             | missing field '%0' initializer           |
| -Wmissing-method-return-type             | method has no return type specified defaults  to 'id' |
| -Wmissing-noreturn                       | %select{function\|method}0 %1 could be declared  with attribute 'noreturn' |
| -Wmissing-noreturn                       | block could be declared with attribute  'noreturn' |
| -Wmissing-prototypes                     | no previous prototype for function %0    |
| -Wmissing-variable-declarations          | no previous extern declaration for non-static  variable %0 |
| -Wmultiple-move-vbase                    | defaulted move assignment operator of %0 will  move assign virtual base class %1 multiple times |
| -Wnested-anon-types                      | anonymous types declared in an anonymous  union/struct are an extension |
| -Wno-typedef-redefinition                | Redefinition of typedef '%0' is a C11 feature |
| -Wnon-literal-null-conversion            | "expression which evaluates to zero  treated as a null pointer constant of " "type %0 |
| -Wnon-pod-varargs                        | second argument to 'va_arg' is of ARC  ownership-qualified type %0 |
| -Wnon-pod-varargs                        | cannot pass %select{non-POD\|non-trivial}0  object of type %1 to variadic %select{function\|block\|method\|constructor}2  expected type from format string was %3 |
| -Wnon-pod-varargs                        | second argument to 'va_arg' is of non-POD type  %0 |
| -Wnon-pod-varargs                        | cannot pass object of  %select{non-POD\|non-trivial}0 type %1 through variadic  %select{function\|block\|method\|constructor}2 call will abort at runtime |
| -Wnon-virtual-dtor                       | %0 has virtual functions but non-virtual  destructor |
| -Wnonnull                                | null passed to a callee which requires a  non-null argument |
| -Wnull-arithmetic                        | use of NULL in arithmetic operation      |
| -Wnull-arithmetic                        | comparison between NULL and non-pointer  %select{(%1 and NULL)\|(NULL and %1)}0 |
| -Wnull-dereference                       | indirection of non-volatile null pointer will  be deleted, not trap |
| -Wobjc-autosynthesis-property-ivar-name-match | autosynthesized property %0 will use  %select{\|synthesized}1 instance variable %2, not existing instance variable  %3 |
| -Wobjc-forward-class-redefinition        | redefinition of forward class %0 of a typedef  name of an object type is ignored |
| -Wobjc-interface-ivars                   | declaration of instance variables in the  interface is deprecated |
| -Wobjc-literal-compare                   | direct comparison of %select{an array  literal\|a dictionary literal\|a numeric literal\|a boxed expression\|}0 has  undefined behavior |
| -Wobjc-literal-missing-atsign            | string literal must be prefixed by '@'   |
| -Wobjc-method-access                     | instance method %objcinstance0 not found  (return type defaults to 'id') did you mean %objcinstance2? |
| -Wobjc-method-access                     | class method %objcclass0 not found (return  type defaults to 'id') did you mean %objcclass2? |
| -Wobjc-method-access                     | instance method %objcinstance0 not found  (return type defaults to 'id') |
| -Wobjc-method-access                     | instance method %0 is being used on 'Class'  which is not in the root class |
| -Wobjc-method-access                     | class method %objcclass0 not found (return  type defaults to 'id') |
| -Wobjc-method-access                     | instance method %0 found instead of class  method %1 |
| -Wobjc-missing-property-synthesis        | "auto property synthesis is synthesizing  property not explicitly synthesized |
| -Wobjc-missing-super-calls               | method possibly missing a [super %0] call |
| -Wobjc-noncopy-retain-block-property     | "retain'ed block property does not copy  the block " "- use copy attribute instead |
| -Wobjc-nonunified-exceptions             | can not catch an exception thrown with @throw  in C++ in the non-unified exception model |
| -Wobjc-property-implementation           | property %0 requires method %1 to be defined -  use @dynamic or provide a method implementation in this category |
| -Wobjc-property-implementation           | property %0 requires method %1 to be defined -  use @synthesize, @dynamic or provide a method implementation in this class  implementation |
| -Wobjc-property-implicit-mismatch        | "primary property declaration is  implicitly strong while redeclaration in class extension is weak |
| -Wobjc-property-matches-cocoa-ownership-rule | property's synthesized getter follows Cocoa  naming convention for returning 'owned' objects |
| -Wobjc-property-no-attribute             | no 'assign', 'retain', or 'copy' attribute is  specified - 'assign' is assumed |
| -Wobjc-property-no-attribute             | default property attribute 'assign' not  appropriate for non-GC object |
| -Wobjc-property-synthesis                | auto property synthesis will not synthesize  property '%0' because it is 'readwrite' but it will be synthesized 'readonly'  via another property |
| -Wobjc-property-synthesis                | "auto property synthesis will not  synthesize property '%0' because it cannot share an ivar with another  synthesized property |
| -Wobjc-protocol-method-implementation    | category is implementing a method which will  also be implemented by its primary class |
| -Wobjc-protocol-property-synthesis       | auto property synthesis will not synthesize  property declared in a protocol |
| -Wobjc-redundant-literal-use             | using %0 with a literal is redundant     |
| -Wobjc-root-class                        | class %0 defined without specifying a base  class |
| -Wobjc-string-compare                    | direct comparison of a string literal has  undefined behavior |
| -Wobjc-string-concatenation              | concatenated NSString literal for an NSArray  expression - possibly missing a comma |
| -Wover-aligned                           | type %0 requires %1 bytes of alignment and the  default allocator only guarantees %2 bytes |
| -Woverloaded-shift-op-parentheses        | overloaded operator %select{\|}0 has lower  precedence than comparison operator |
| -Woverloaded-virtual                     | %q0 hides overloaded virtual  %select{function\|functions}1 |
| -Woverriding-method-mismatch             | conflicting distributed object modifiers on  parameter type in declaration of %0 |
| -Woverriding-method-mismatch             | conflicting parameter types in declaration of  %0: %1 vs %2 |
| -Woverriding-method-mismatch             | conflicting variadic declaration of method and  its implementation |
| -Woverriding-method-mismatch             | conflicting distributed object modifiers on  return type in declaration of %0 |
| -Woverriding-method-mismatch             | conflicting parameter types in declaration of  %0%diff{: $ vs $\|}1,2 |
| -Woverriding-method-mismatch             | conflicting return type in declaration of  %0%diff{: $ vs $\|}1,2 |
| -Woverriding-method-mismatch             | conflicting return type in declaration of %0:  %1 vs %2 |
| -Wpacked                                 | packed attribute is unnecessary for %0   |
| -Wpadded                                 | padding %select{struct\|interface\|class}0 %1  with %2 %select{byte\|bit}3%select{\|s}4 to align anonymous bit-field |
| -Wpadded                                 | padding %select{struct\|interface\|class}0 %1  with %2 %select{byte\|bit}3%select{\|s}4 to align %5 |
| -Wpadded                                 | padding size of %0 with %1  %select{byte\|bit}2%select{\|s}3 to alignment boundary |
| -Wparentheses                            | using the result of an assignment as a  condition without parentheses |
| -Wparentheses                            | %0 has lower precedence than %1 %1 will be  evaluated first |
| -Wparentheses                            | operator '?:' has lower precedence than '%0'  '%0' will be evaluated first |
| -Wparentheses-equality                   | equality comparison with extraneous  parentheses |
| -Wpointer-arith                          | subtraction of pointers to type %0 of zero  size has undefined behavior |
| -Wpredefined-identifier-outside-function | predefined identifier is only valid inside  function |
| -Wprivate-extern                         | use of __private_extern__ on a declaration may  not produce external symbol private to the linkage unit and is deprecated |
| -Wprotocol                               | method %0 in protocol not implemented    |
| -Wprotocol-property-synthesis-ambiguity  | property of type %0 was selected for synthesis |
| -Wreadonly-iboutlet-property             | readonly IBOutlet property '%0' when  auto-synthesized may not work correctly with 'nib' loader |
| -Wreadonly-setter-attrs                  | property attributes '%0' and '%1' are mutually  exclusive |
| -Wreceiver-expr                          | receiver type %0 is not 'id' or interface  pointer, consider casting it to 'id' |
| -Wreceiver-forward-class                 | receiver type %0 for instance message is a  forward declaration |
| -Wreceiver-is-weak                       | "weak %select{receiver\|property\|implicit  property}0 may be unpredictably set to nil |
| -Wreinterpret-base-class                 | 'reinterpret_cast' %select{from\|to}3 class %0  %select{to\|from}3 its %select{virtual base\|base at non-zero offset}2 %1  behaves differently from 'static_cast' |
| -Wreorder                                | %select{field\|base class}0 %1 will be  initialized after %select{field\|base}2 %3 |
| -Wrequires-super-attribute               | %0 attribute cannot be applied to  %select{methods in protocols\|dealloc}1 |
| -Wreturn-stack-address                   | returning address of local temporary object |
| -Wreturn-stack-address                   | returning address of label, which is local |
| -Wreturn-stack-address                   | address of stack memory associated with local  variable %0 returned |
| -Wreturn-stack-address                   | reference to stack memory associated with  local variable %0 returned |
| -Wreturn-stack-address                   | returning reference to local temporary object |
| -Wreturn-type                            | control may reach end of non-void function |
| -Wreturn-type                            | non-void %select{function\|method}1 %0 should  return a value, DefaultError |
| -Wreturn-type                            | control reaches end of non-void function |
| -Wreturn-type-c-linkage                  | %0 has C-linkage specified, but returns  incomplete type %1 which could be incompatible with C |
| -Wreturn-type-c-linkage                  | %0 has C-linkage specified, but returns  user-defined type %1 which is incompatible with C |
| -Wsection                                | section does not match previous declaration |
| -Wselector                               | creating selector for nonexistent method %0 |
| -Wselector-type-mismatch                 | multiple selectors named %0 found        |
| -Wself-assign                            | explicitly assigning a variable of type %0 to  itself |
| -Wself-assign-field                      | assigning %select{field\|instance variable}0 to  itself |
| -Wsentinel                               | "missing sentinel in %select{function  call\|method dispatch\|block call}0 |
| -Wsentinel                               | not enough variable arguments in %0  declaration to fit a sentinel |
| -Wshadow                                 | declaration shadows a %select{"  "local variable\|" "variable in %2\|" "static data  member of %2\|" "field of %2}1 |
| -Wshadow-ivar                            | local declaration of %0 hides instance  variable |
| -Wshift-count-negative                   | shift count is negative                  |
| -Wshift-count-overflow                   | shift count = width of type              |
| -Wshift-op-parentheses                   | operator '%0' has lower precedence than '%1'  '%1' will be evaluated first |
| -Wshift-overflow                         | signed shift result (%0) requires %1 bits to  represent, but %2 only has %3 bits |
| -Wshift-sign-overflow                    | signed shift result (%0) sets the sign bit of  the shift expression's type (%1) and becomes negative |
| -Wshorten-64-to-32                       | implicit conversion loses integer precision:  %0 to %1 |
| -Wsign-compare                           | comparison of integers of different signs: %0  and %1 |
| -Wsign-conversion                        | implicit conversion changes signedness: %0 to  %1 |
| -Wsign-conversion                        | operand of ? changes signedness: %0 to %1 |
| -Wsizeof-array-argument                  | sizeof on array function parameter will return  size of %0 instead of %1 |
| -Wsizeof-array-decay                     | sizeof on pointer operation will return size  of %0 instead of %1 |
| -Wsizeof-pointer-memaccess               | '%0' call operates on objects of type %1 while  the size is based on a " "different type %2 |
| -Wsizeof-pointer-memaccess               | argument to 'sizeof' in %0 call is the same  pointer type %1 as the %select{destination\|source}2 expected %3 or an  explicit length |
| -Wsometimes-uninitialized                | variable %0 is %select{used\|captured}1  uninitialized whenever %select{'%3' condition is %select{true\|false}4\|'%3'  loop %select{is entered\|exits because its condition is false}4\|'%3' loop  %select{condition is true\|exits because its condition is false}4\|switch %3 is  taken\|its declaration is reached\|%3 is called}2 |
| -Wstatic-local-in-inline                 | non-constant static local variable in inline  function may be different in different files |
| -Wstatic-self-init                       | static variable %0 is suspiciously used within  its own initialization |
| -Wstrict-selector-match                  | multiple methods named %0 found          |
| -Wstring-compare                         | result of comparison against %select{a string  literal\|@encode}0 is unspecified (use strncmp instead) |
| -Wstring-conversion                      | implicit conversion turns string literal into  bool: %0 to %1 |
| -Wstring-plus-char                       | adding %0 to a string pointer does not append  to the string |
| -Wstring-plus-int                        | adding %0 to a string does not append to the  string |
| -Wstrlcpy-strlcat-size                   | size argument in %0 call appears to be size of  the source expected the size of the destination |
| -Wstrncat-size                           | the value of the size argument in 'strncat' is  too large, might lead to a " "buffer overflow |
| -Wstrncat-size                           | size argument in 'strncat' call appears "  "to be size of the source |
| -Wstrncat-size                           | the value of the size argument to 'strncat' is  wrong |
| -Wsuper-class-method-mismatch            | method parameter type %diff{$ does not match  super class method parameter type $\|does not match super class method  parameter type}0,1 |
| -Wswitch                                 | overflow converting case value to switch  condition type (%0 to %1) |
| -Wswitch                                 | case value not in enumerated type %0     |
| -Wswitch                                 | %0 enumeration values not handled in switch:  %1, %2, %3... |
| -Wswitch                                 | enumeration values %0 and %1 not handled in  switch |
| -Wswitch                                 | enumeration value %0 not handled in switch |
| -Wswitch                                 | enumeration values %0, %1, and %2 not handled  in switch |
| -Wswitch-enum                            | enumeration values %0, %1, and %2 not  explicitly handled in switch |
| -Wswitch-enum                            | enumeration values %0 and %1 not explicitly  handled in switch |
| -Wswitch-enum                            | %0 enumeration values not explicitly handled  in switch: %1, %2, %3... |
| -Wswitch-enum                            | enumeration value %0 not explicitly handled in  switch |
| -Wtautological-compare                   | comparison of %0 unsigned%select{\| enum}2  expression is always %1 |
| -Wtautological-compare                   | %select{self-\|array }0comparison always  evaluates to %select{false\|true\|a constant}1 |
| -Wtautological-compare                   | comparison of unsigned%select{\| enum}2  expression %0 is always %1 |
| -Wtautological-constant-out-of-range-compare | comparison of constant %0 with expression of  type %1 is always %select{false\|true}2 |
| -Wthread-safety-analysis                 | locking '%0' that is already locked      |
| -Wthread-safety-analysis                 | cannot call function '%0' while mutex '%1' is  locked |
| -Wthread-safety-analysis                 | %select{reading\|writing}2 the value pointed to  by '%0' requires locking %select{'%1'\|'%1' exclusively}2 |
| -Wthread-safety-analysis                 | unlocking '%0' that was not locked       |
| -Wthread-safety-analysis                 | mutex '%0' is locked exclusively and shared in  the same scope |
| -Wthread-safety-analysis                 | calling function '%0' requires  %select{shared\|exclusive}2 lock on '%1' |
| -Wthread-safety-analysis                 | %select{reading\|writing}2 variable '%0'  requires locking %select{'%1'\|'%1' exclusively}2 |
| -Wthread-safety-analysis                 | cannot resolve lock expression           |
| -Wthread-safety-analysis                 | expecting mutex '%0' to be locked at the end  of function |
| -Wthread-safety-analysis                 | mutex '%0' is not locked on every path through  here |
| -Wthread-safety-analysis                 | %select{reading\|writing}1 the value pointed to  by '%0' requires locking %select{any mutex\|any mutex exclusively}1 |
| -Wthread-safety-analysis                 | %select{reading\|writing}1 variable '%0'  requires locking %select{any mutex\|any mutex exclusively}1 |
| -Wthread-safety-analysis                 | mutex '%0' is still locked at the end of  function |
| -Wthread-safety-analysis                 | expecting mutex '%0' to be locked at start of  each loop |
| -Wthread-safety-attributes               | ignoring %0 attribute because its argument is  invalid |
| -Wthread-safety-attributes               | %0 attribute only applies to %select{fields  and global variables\|functions and methods\|classes and structs}1 |
| -Wthread-safety-attributes               | %0 attribute requires arguments that are class  type or point to class type type here is '%1' |
| -Wthread-safety-attributes               | %0 attribute can only be applied in a context  annotated with 'lockable' attribute |
| -Wthread-safety-attributes               | %0 attribute requires arguments whose type is  annotated with 'lockable' attribute type here is '%1' |
| -Wthread-safety-attributes               | '%0' only applies to pointer types type here  is %1 |
| -Wthread-safety-beta                     | Thread safety beta warning.              |
| -Wthread-safety-precise                  | %select{reading\|writing}2 the value pointed to  by '%0' requires locking %select{'%1'\|'%1' exclusively}2 |
| -Wthread-safety-precise                  | %select{reading\|writing}2 variable '%0'  requires locking %select{'%1'\|'%1' exclusively}2 |
| -Wthread-safety-precise                  | calling function '%0' requires  %select{shared\|exclusive}2 lock on '%1' |
| -Wtype-safety                            | this type tag was not designed to be used with  this function |
| -Wtype-safety                            | specified %0 type tag requires a null pointer |
| -Wtype-safety                            | argument type %0 doesn't match specified '%1'  type tag %select{that requires %3\|}2 |
| -Wundeclared-selector                    | undeclared selector %0 did you mean %1?  |
| -Wundeclared-selector                    | undeclared selector %0                   |
| -Wundefined-inline                       | inline function %q0 is not defined       |
| -Wundefined-internal                     | %select{function\|variable}0 %q1 has internal  linkage but is not defined |
| -Wundefined-reinterpret-cast             | dereference of type %1 that was  reinterpret_cast from type %0 has undefined behavior |
| -Wundefined-reinterpret-cast             | reinterpret_cast from %0 to %1 has undefined  behavior |
| -Wuninitialized                          | reference %0 is not yet bound to a value when  used within its own initialization |
| -Wuninitialized                          | field %0 is uninitialized when used here |
| -Wuninitialized                          | block pointer variable %0 is uninitialized  when captured by block |
| -Wuninitialized                          | variable %0 is uninitialized when used within  its own initialization |
| -Wuninitialized                          | variable %0 is uninitialized when %select{used  here\|captured by block}1 |
| -Wuninitialized                          | reference %0 is not yet bound to a value when  used here |
| -Wunneeded-internal-declaration          | %select{function\|variable}0 %1 is not needed  and will not be emitted |
| -Wunneeded-internal-declaration          | 'static' function %0 declared in header file  should be declared 'static inline' |
| -Wunneeded-member-function               | member function %0 is not needed and will not  be emitted |
| -Wunreachable-code                       | will never be executed                   |
| -Wunsequenced                            | multiple unsequenced modifications to %0 |
| -Wunsequenced                            | unsequenced modification and access to %0 |
| -Wunsupported-friend                     | dependent nested name specifier '%0' for  friend template declaration is not supported ignoring this friend declaration |
| -Wunsupported-friend                     | dependent nested name specifier '%0' for  friend class declaration is not supported turning off access control for %1 |
| -Wunsupported-visibility                 | target does not support 'protected' visibility  using 'default' |
| -Wunused-comparison                      | %select{equality\|inequality}0 comparison  result unused |
| -Wunused-const-variable                  | unused variable %0                       |
| -Wunused-exception-parameter             | unused exception parameter %0            |
| -Wunused-function                        | unused function %0                       |
| -Wunused-label                           | unused label %0                          |
| -Wunused-member-function                 | unused member function %0                |
| -Wunused-parameter                       | unused parameter %0                      |
| -Wunused-private-field                   | private field %0 is not used             |
| -Wunused-property-ivar                   | ivar %0 which backs the property is not  referenced in this property's accessor |
| -Wunused-result                          | ignoring return value of function declared  with warn_unused_result attribute |
| -Wunused-value                           | ignoring return value of function declared  with %0 attribute |
| -Wunused-value                           | expression result unused should this cast be  to 'void'? |
| -Wunused-value                           | expression result unused                 |
| -Wunused-variable                        | unused variable %0                       |
| -Wunused-volatile-lvalue                 | expression result unused assign into a  variable to force a volatile load |
| -Wused-but-marked-unused                 | %0 was marked unused but was used        |
| -Wuser-defined-literals                  | user-defined literal suffixes not starting  with '_' are reserved%select{ no literal will invoke this operator\|}0 |
| -Wvarargs                                | second parameter of 'va_start' not last named  argument |
| -Wvarargs                                | 'va_start' has undefined behavior with  reference types |
| -Wvarargs                                | second argument to 'va_arg' is of promotable  type %0 this va_arg has undefined behavior because arguments will be promoted  to %1 |
| -Wvector-conversion                      | incompatible vector types  %select{%diff{assigning to $ from $\|assigning to different  types}0,1\|%diff{passing $ to parameter of type $\|passing to parameter of  different type}0,1\|%diff{returning $ from a function with result type  $\|returning from function with different return type}0,1\|%diff{converting $  to type $\|converting between types}0,1\|%diff{initializing $ with an  expression of type $\|initializing with expression of different  type}0,1\|%diff{sending $ to parameter of type $\|sending to parameter of different  type}0,1\|%diff{casting $ to type $\|casting between types}0,1}2 |
| -Wvexing-parse                           | parentheses were disambiguated as a function  declaration |
| -Wvexing-parse                           | empty parentheses interpreted as a function  declaration |
| -Wvisibility                             | declaration of %0 will not be visible outside  of this function |
| -Wvisibility                             | redefinition of %0 will not be visible outside  of this function |
| -Wvla                                    | variable length array used               |
| -Wvla-extension                          | variable length arrays are a C99 feature |
| -Wweak-template-vtables                  | explicit template instantiation %0 will emit a  vtable in every translation unit |
| -Wweak-vtables                           | %0 has no out-of-line virtual method  definitions; its vtable will be emitted in every translation unit |
| Lexer Warnings                           |                                          |
| Warning                                  | Message                                  |
| -W#pragma-messages                       | %0                                       |
| -W#warnings                              | %0                                       |
| -W#warnings                              | %0                                       |
| -Wambiguous-macro                        | ambiguous expansion of macro %0          |
| -Wauto-import                            | treating  #%select{include\|import\|include_next\|__include_macros}0 as an import of  module '%1' |
| -Wbackslash-newline-escape               | backslash and newline separated by space |
| -Wc++11-compat                           | identifier after literal will be treated as a  user-defined literal suffix in C++11 |
| -Wc++11-compat                           | '%0' is a keyword in C++11               |
| -Wc++98-c++11-compat                     | digit separators are incompatible with C++  standards before C++1y |
| -Wc++98-c++11-compat-pedantic            | binary integer literals are incompatible with  C++ standards before C++1y |
| -Wc++98-compat                           | raw string literals are incompatible with  C++98 |
| -Wc++98-compat                           | unicode literals are incompatible with C++98 |
| -Wc++98-compat                           | universal character name referring to a  control character is incompatible with C++98 |
| -Wc++98-compat                           | '::' is treated as digraph ':' (aka '[')  followed by ':' in C++98 |
| -Wc++98-compat                           | using this character in an identifier is  incompatible with C++98 |
| -Wc++98-compat                           | specifying character '%0' with a universal  character name is incompatible with C++98 |
| -Wc++98-compat-pedantic                  | variadic macros are incompatible with C++98 |
| -Wc++98-compat-pedantic                  | #line number greater than 32767 is  incompatible with C++98 |
| -Wc++98-compat-pedantic                  | C++98 requires newline at end of file    |
| -Wc++98-compat-pedantic                  | empty macro arguments are incompatible with  C++98 |
| -Wc99-compat                             | unicode literals are incompatible with C99 |
| -Wc99-compat                             | %select{using this character in an  identifier\|starting an identifier with this character}0 is incompatible with  C99 |
| -Wcomment                                | '/*' within block comment                |
| -Wcomment                                | escaped newline between */ characters at block  comment end |
| -Wdisabled-macro-expansion               | disabled expansion of recursive macro    |
| -Wheader-guard                           | %0 is used as a header guard here, followed by  #define of a different macro |
| -Wignored-attributes                     | unknown attribute '%0'                   |
| -Wincomplete-module                      | header '%0' is included in module '%1' but not  listed in module map |
| -Wincomplete-umbrella                    | umbrella header for module '%0' does not  include header '%1' |
| -Winvalid-token-paste                    | pasting formed '%0', an invalid preprocessing  token, DefaultError |
| -Wmalformed-warning-check                | __has_warning expected option name (e.g.  \"-Wundef\") |
| -Wnewline-eof                            | no newline at end of file                |
| -Wnull-character                         | null character ignored                   |
| -Wnull-character                         | null character(s) preserved in string literal |
| -Wnull-character                         | null character(s) preserved in character  literal |
| -Wtrigraphs                              | ignored trigraph would end block comment |
| -Wtrigraphs                              | trigraph ignored                         |
| -Wundef                                  | %0 is not defined, evaluates to 0        |
| -Wunicode                                | universal character names are only valid in  C99 or C++ treating as '\\' followed by identifier |
| -Wunicode                                | \\%0 used with no following hex digits  treating as '\\' followed by identifier |
| -Wunicode                                | incomplete universal character name treating  as '\\' followed by identifier |
| -Wunicode                                | universal character name refers to a surrogate  character |
| -Wunknown-pragmas                        | unknown pragma ignored                   |
| -Wunknown-pragmas                        | pragma STDC FENV_ACCESS ON is not supported,  ignoring pragma |
| -Wunused-macros                          | macro is not used                        |
| Parser Warnings                          |                                          |
| Warning                                  | Message                                  |
| -Warc-bridge-casts-disallowed-in-nonarc  | '%0' casts have no effect when not using ARC |
| -Wattributes                             | unknown __declspec attribute %0 ignored  |
| -Wavailability                           | 'unavailable' availability overrides all other  availability information |
| -Wc++11-compat                           | use of right-shift operator ('') in template  argument will require parentheses in C++11 |
| -Wc++11-compat                           | 'auto' storage class specifier is redundant  and incompatible with C++11 |
| -Wc++98-c++11-compat                     | 'decltype(auto)' type specifier is  incompatible with C++ standards before C++1y |
| -Wc++98-compat                           | range-based for loop is incompatible with  C++98 |
| -Wc++98-compat                           | alias declarations are incompatible with C++98 |
| -Wc++98-compat                           | in-class initialization of non-static data  members is incompatible with C++98 |
| -Wc++98-compat                           | defaulted function definitions are  incompatible with C++98 |
| -Wc++98-compat                           | rvalue references are incompatible with C++98 |
| -Wc++98-compat                           | reference qualifiers on functions are  incompatible with C++98 |
| -Wc++98-compat                           | inline namespaces are incompatible with C++98 |
| -Wc++98-compat                           | generalized initializer lists are incompatible  with C++98 |
| -Wc++98-compat                           | trailing return types are incompatible with  C++98 |
| -Wc++98-compat                           | enumeration types with a fixed underlying type  are incompatible with C++98 |
| -Wc++98-compat                           | alignof expressions are incompatible with  C++98 |
| -Wc++98-compat                           | '%0' keyword is incompatible with C++98  |
| -Wc++98-compat                           | 'decltype' type specifier is incompatible with  C++98 |
| -Wc++98-compat                           | deleted function definitions are incompatible  with C++98 |
| -Wc++98-compat                           | consecutive right angle brackets are  incompatible with C++98 (use '> >') |
| -Wc++98-compat                           | static_assert declarations are incompatible  with C++98 |
| -Wc++98-compat                           | scoped enumerations are incompatible with  C++98 |
| -Wc++98-compat                           | lambda expressions are incompatible with C++98 |
| -Wc++98-compat                           | attributes are incompatible with C++98   |
| -Wc++98-compat                           | 'alignas' is incompatible with C++98     |
| -Wc++98-compat                           | noexcept specifications are incompatible with  C++98 |
| -Wc++98-compat                           | literal operators are incompatible with C++98 |
| -Wc++98-compat                           | noexcept expressions are incompatible with  C++98 |
| -Wc++98-compat                           | 'nullptr' is incompatible with C++98     |
| -Wc++98-compat-pedantic                  | extra '' outside of a function is incompatible  with C++98 |
| -Wc++98-compat-pedantic                  | extern templates are incompatible with C++98 |
| -Wc++98-compat-pedantic                  | commas at the end of enumerator lists are  incompatible with C++98 |
| -Wdangling-else                          | add explicit braces to avoid dangling else |
| -Wdeprecated                             | Use of 'long' with '__vector' is deprecated |
| -Wdeprecated-declarations                | use of C-style parameters in Objective-C  method declarations is deprecated |
| -Wdeprecated-register                    | 'register' storage class specifier is  deprecated |
| -Wduplicate-decl-specifier               | duplicate '%0' declaration specifier     |
| -Wextra-semi                             | extra ';' after member function definition |
| -Wextra-tokens                           | "extra tokens at the end of '#pragma omp  %0' are ignored |
| -Wgcc-compat                             | GCC does not allow %0 attribute in this  position on a function definition |
| -Wignored-attributes                     | attribute %0 ignored, because it is not  attached to a declaration |
| -Wmicrosoft-exists                       | dependent  %select{__if_not_exists\|__if_exists}0 declarations are ignored |
| -Wmissing-selector-name                  | %0 used as the name of the previous parameter  rather than as part of the selector |
| -Wsemicolon-before-method-body           | semicolon before method body is ignored  |
| -Wsource-uses-openmp                     | "unexpected '#pragma omp ...' in program |
| -Wstatic-inline-explicit-instantiation   | ignoring '%select{static\|inline}0' keyword on  explicit template instantiation |
posted @ 2015-12-06 20:30  iShao  阅读(1805)  评论(0编辑  收藏  举报