[objective-c] Xcode에서 경고를 억제하는 방법이 있습니까?

Xcode에서 경고를 억제하는 방법이 있습니까?

예를 들어 문서화되지 않은 메서드를 호출하고 있으며 메서드가 헤더에 없기 때문에 컴파일시 경고가 표시됩니다. 경고를 중지하기 위해 헤더에 추가 할 수 있다는 것을 알고 있지만, 경고를 억제하기 위해 헤더에 추가하는 것 외에 다른 방법이 있는지 궁금합니다 (헤더를 깨끗하고 표준으로 유지할 수 있음)? 프라 그마 같은 거요?



답변

Xcode 3 및 llvm-gcc-4.2를 사용하여 파일별로 경고를 비활성화하려면 다음을 사용할 수 있습니다.

#pragma GCC diagnostic ignored "-Wwarning-flag"

경고 이름은 gcc 경고 플래그입니다.

이것은 명령 줄의 모든 경고 플래그를 재정의합니다. 그래도 모든 경고와 함께 작동하지는 않습니다. CFLAGS에 -fdiagnostics-show-option을 추가하면 해당 경고를 비활성화하는 데 사용할 수있는 플래그를 확인할 수 있습니다.


답변

사용하지 않는 변수 경고 를 억제하는 더 간단한 방법이 있습니다 .

#pragma unused(varname)

편집 : 출처 : http://www.cocoadev.com/index.pl?XCodePragmas

업데이트 : 나는 새로운 솔루션, 더 강력한 솔루션을 찾았습니다.

  1. 프로젝트> 활성 대상 편집> 빌드 탭을 엽니 다.
  2. 아래 User-Defined: 찾기 (또는 찾을 수없는 경우 생성) 키 :로 GCC_WARN_UNUSED_VARIABLE설정합니다 NO.

EDIT-2 예 :

BOOL ok = YES;
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

컴파일러는에 대해 사용되지 않은 변수 경고를 표시합니다 ok.

해결책:

BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

추신 : 다른 경고를 설정 / 재설정 할 수도 있습니다.
GCC_WARN_ABOUT_RETURN_TYPE:YES/NO


답변

gcc의 경우 다음을 사용할 수 있습니다.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop

여기에서 GCC pragma에 대해 알아볼 수 있으며 경고의 경고 코드를 얻으려면 Report Navigator (Command + 9)로 이동하여 최상위 빌드를 선택하고 로그를 확장 한 다음 (오른쪽의 ‘=’버튼) 아래쪽에 경고 코드가 다음과 같이 대괄호 안에 있습니다.[-Wshadow-ivar]

clang의 경우 사용할 수 있습니다.

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop


답변

개별 파일에 대한 경고를 표시하지 않으려면 다음을 수행하십시오.

xcode 프로젝트에서 파일을 선택하십시오. 정보 가져 오기를 눌러 빌드 옵션이있는 페이지로 이동하고 -Wno-를 입력하여 경고를 무효화합니다.

-아니-

예 :

-Wno-unused-parameter

프로젝트 설정에서 빌드 탭 페이지 하단에있는 GCC 경고를 보면 경고 이름을 알 수 있습니다. 각 경고를 클릭하면 경고 매개 변수 이름이 표시됩니다.

예 :

함수 매개 변수가 선언과 별도로 사용되지 않을 때마다 경고합니다. [GCC_WARN_UNUSED_PARAMETER, -Wunused-parameter]


답변

Objective-C를 사용하면 많은 심각한 오류가 경고로만 나타납니다. 경고를 비활성화 하지 않을 뿐만 아니라 일반적으로 “경고를 오류로 처리”(-Werror)를 설정합니다.

코드의 모든 유형의 경고는 작업을 올바르게 수행하거나 (일반적으로 객체를 올바른 유형으로 캐스팅하여) 필요할 때 프로토 타입을 선언하여 방지 할 수 있습니다.


답변

경고를 없애려면 : 해당 개체에 대한 범주 인터페이스를 만들어보십시오.

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}

여담으로, 나는 강력하게 코드를 운송에 문서화되지 않은 메소드를 호출에 대해 조언한다. 인터페이스는 변경 될 수 있으며 변경 될 수 있으며 이는 귀하의 잘못입니다.


답변

http://nshipster.com/pragma/#inhibiting-warnings- 경고 금지 섹션으로 건너 뛰기