Apple开发_#pargma 去除系统警告

1、简介

  • pragma 本质上是声明,常用的功能就是注释,尤其是给Code分段注释。
  • 它还有一个强大的功能就是处理编译器警告。
  • 在iOS 开发中,会遇到一些系统方法弃用警告⚠️,循环引用,未使用的变量之类的警告。
  • 我们可以使用#pragma 声明来防止编译器报警告。

2、常用方法

  • 2.0 基本格式

    • clang diagnostic 是#pragma的一个常用命令。
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-相关命令"
    // 你自己的代码
    #pragma clang diagnostic pop
    
  • 2.1 未使用的变量警告⚠️

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
// 未使用的变量警告⚠️
NSInteger variableValue; 
#pragma clang diagnostic pop
  • 2.2 方法弃用警告⚠️

    • 声明弃用
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
    // 方法弃用
    #pragma clang disgnostic pop
    
    • 实现弃用
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-implementations"
    // 方法弃用
    #pragma clang disgnostic pop
    
  • 2.3 不兼容指针类型

#pragma clang diagnostic push   
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"  
// 不兼容指针类型
#pragma clang diagnostic pop
  • 2.4 循环引用⚠️

#pragma clang diagnostic push  
#pragma clang diagnostic ignored "-Warc-retain-cycles" 
// 循环引用⚠️
#pragma clang diagnostic pop
  • 2.5 内存泄漏警告⚠️

#pragma clang diagnostic push  
#pragma clang diagnostic ignored   "-Warc-performSelector-leaks"
// 内存泄漏警告⚠️
#pragma clang diagnostic pop
  • 2.6 未使用default⚠️

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wcovered-switch-default"
// 未使用default⚠️
//    switch (style) {
//        case UITableViewCellStyleDefault:
//        case UITableViewCellStyleValue1:
//        case UITableViewCellStyleValue2:
//        case UITableViewCellStyleSubtitle:
//            // ...
//        default:
//            return;
//    }
#pragma clang diagnostic pop
  • 2.7 传递空参数

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
// 传递空参数
  sub_btn.attributedTitle = nil;
#pragma clang diagnostic pop
  • 2.8 解释方法的参数错了

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"

/**
 * @brief 设置当前约束与目标视图的关系,并返回当前约束对象
 *
 * @param view             目标视图
 * @param relation         关系类型(相等、大于等于、小于等于)
 *
 * @return                 当前约束对象,可链式调用其他方法
 *
 * @note                  该方法通常用于设置两个视图之间的约束关系,例如在父视图中水平居中子视图:
 *                         [self.subView mas_makeConstraints:^(MASConstraintMaker *make) {
 *                             make.centerX.equalTo(self.superview);
 *                         }];
 */
- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation;

#pragma clang diagnostic pop

3、更多参考

  • 3.1 语义警告(Semantic Warnings)

    • -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
  • 3.2 Lexer警告(Lexer Warnings)

    • -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
  • 3.3 分析器警告(Parser Warnings)

    • -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 exp

4、屏蔽所有的警告

  • 如果你想关闭所有的警告,你可以在工程设置中修改编译器的警告级别。
  • 在工程设置中,找到 "Build Settings" 并滚动到 "Clang Compiler - Warnings" 部分。
posted @ 2019-04-08 00:39  CH520  阅读(509)  评论(0编辑  收藏  举报