programing

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

stoneblock 2023. 5. 24. 21:40

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

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

예를 들어, 나는 문서화되지 않은 메서드를 호출하고 있으며 메서드가 헤더에 없기 때문에 컴파일 시 경고를 받습니다.경고를 중지하기 위해 헤더에 추가할 수 있다는 것을 알고 있지만, 경고를 억제하기 위해 헤더에 추가하는 것 외에 다른 방법이 있는지 궁금합니다.프라그마인가 뭔가?

Xcode 3 및 llvm-gcc-4.2를 사용하여 파일 단위로 경고를 사용하지 않도록 설정하려면 다음을 사용합니다.

#pragma GCC diagnostic ignored "-Wwarning-flag"

여기서 warning name은 gcc 경고 플래그입니다.

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

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

#pragma unused(varname)

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

업데이트: 보다 강력한 새로운 솔루션을 발견했습니다.

  1. Project > Edit Active Target > Build 탭을 엽니다.
  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);

PS: 다른 경고를 설정/재설정할 수도 있습니다.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 플러그마에 대해 배울 수 있으며 경고의 경고 코드를 받으려면 보고서 탐색기(명령+9)로 이동하여 맨 위 빌드를 선택하고 로그(오른쪽의 '=' 버튼)를 확장한 다음 아래로 스크롤하면 경고 코드가 다음과 같은 대괄호 안에 있습니다.[-Wshadow-ivar]

클랜에 사용할 수 있습니다.

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

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

xcode 프로젝트에서 파일을 선택합니다.get info를 눌러 빌드 옵션이 포함된 페이지로 이동 -Wno-를 입력하여 경고를 무시합니다.

-아니오-

예.

-사용되지 않음-매개변수

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

예.

함수 매개 변수가 선언 외에 사용되지 않을 때마다 경고합니다.[GCC_WARN_UNUSED_PARAMETER, -Unused-PARAMETER]

Objective-C를 사용하면 여러 심각한 오류가 경고로만 나타납니다.경고를 사용하지 않도록 설정하지 않을 뿐만 아니라, 일반적으로 "경고를 오류로 처리"(-Werror)를 설정합니다.

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

경고를 제거하려면: 문제의 개체에 대한 범주 인터페이스를 만들어 보십시오.

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

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

별도로, 저는 문서화되지 않은 방법을 배송 코드로 호출하지 않을 것을 강력히 권고합니다.인터페이스는 변경될 수 있고 변경될 것이며, 이는 사용자의 잘못입니다.

http://nshipster.com/pragma/ #reciting-messages - 경고 금지 섹션으로 건너뜁니다.

'문서화되지 않음'이라는 별도의 새 헤더 파일을 만듭니다.h'를 입력하고 프로젝트에 추가합니다.그런 다음 문서화되지 않은 함수를 호출할 각 클래스에 대해 인터페이스 블록을 하나씩 만들고 각 클래스에 '(문서화되지 않음)' 범주를 지정합니다.그런 다음 PCH에 헤더 파일 하나만 포함합니다.이렇게 하면 원래 헤더 파일이 깨끗하게 유지되고, 유지 관리할 다른 파일이 하나뿐이며, PCH에서 한 줄을 주석 처리하여 모든 경고를 다시 활성화할 수 있습니다.

저는 '감가상각'의 감가상각 함수에도 이 방법을 사용합니다.h'는 '(감가상각)'의 범주로 표시됩니다.

가장 좋은 점은 개별 프로토타입에 주석을 달거나 주석을 달아서 개별 경고를 선택적으로 활성화/비활성화할 수 있다는 것입니다.

특정 경고를 억제하는 것은 안전하지 않습니다.컴파일러는 인수 유형을 알고 올바른 코드를 생성하는 메서드로 돌아가야 합니다.

예를 들어, 다음과 같은 방법을 호출하는 경우

[food doSomethingWithFloat:1.0];

플로트를 사용하고 프로토타입이 보이지 않으면 컴파일러는 방법이 플로트가 아닌 더블을 사용한다고 추측합니다.이로 인해 충돌이 발생하고 값이 잘못 해석될 수 있습니다.위의 예에서 intel 기계와 같은 작은 엔디안 기계에서 수신기 방법은 1이 아니라 0이 전달된 것을 볼 수 있습니다.

i386 ABI 문서에서 그 이유를 읽거나 경고를 수정할 수 있습니다. :-)

언급URL : https://stackoverflow.com/questions/194666/is-there-a-way-to-suppress-warnings-in-xcode