답변:
Xcode 3 및 llvm-gcc-4.2를 사용하여 파일별로 경고를 비활성화하려면 다음을 사용할 수 있습니다.
#pragma GCC diagnostic ignored "-Wwarning-flag"
경고 이름은 gcc 경고 플래그입니다.
이것은 명령 줄의 모든 경고 플래그를 재정의합니다. 그래도 모든 경고와 함께 작동하지는 않습니다. CFLAGS에 -fdiagnostics-show-option을 추가하면 해당 경고를 비활성화하는 데 사용할 수있는 플래그를 확인할 수 있습니다.
#pragma GCC diagnostic ignored "-Wwarning-flag"
이미 제거
warning-flag
. gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
사용하지 않는 변수 경고 를 억제하는 더 간단한 방법이 있습니다 .
#pragma unused(varname)
편집 : 출처 : http://www.cocoadev.com/index.pl?XCodePragmas
업데이트 : 나는 새로운 솔루션, 더 강력한 솔루션을 찾았습니다.
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
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop
여기에서 GCC pragma에 대해 알아볼 수 있으며 경고의 경고 코드를 얻으려면 Report Navigator (Command + 9)로 이동하여 최상위 빌드를 선택하고 로그를 확장 한 다음 (오른쪽의 '='버튼) 아래쪽에 경고 코드가 다음과 같이 대괄호 안에 있습니다.[-Wshadow-ivar]
#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]
...m:45:69: Incompatible pointer types sending...
빌드 설명을 열고이 경고를 찾았습니다. [-Wincompatible-pointer-types]
방금 이름을 바꾸고 -Wno-incompatible-pointer-types
내 .m
파일에 플래그로 추가했습니다 ... 붐 더 이상 경고 없음 ... +10 if 내가 할 수있는
Objective-C를 사용하면 많은 심각한 오류가 경고로만 나타납니다. 경고를 비활성화 하지 않을 뿐만 아니라 일반적으로 "경고를 오류로 처리"(-Werror)를 설정합니다.
코드의 모든 유형의 경고는 작업을 올바르게 수행하거나 (일반적으로 객체를 올바른 유형으로 캐스팅하여) 필요할 때 프로토 타입을 선언하여 방지 할 수 있습니다.
경고를 없애려면 : 해당 개체에 대한 범주 인터페이스를 만들어보십시오.
@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)
-(id)theUndocumentedMethod;
@end
...
@implementation myClass : mySuperclass
-(void) myMethod {
...
[theObject theUndocumentedMethod];
...
}
여담으로, 나는 강력하게 코드를 운송에 문서화되지 않은 메소드를 호출에 대해 조언한다. 인터페이스는 변경 될 수 있으며 변경 될 수 있으며 이는 귀하의 잘못입니다.
http://nshipster.com/pragma/#inhibiting-warnings- 경고 금지 섹션으로 건너 뛰기
'Undocumented.h'라는 별도의 새 헤더 파일을 만들고 프로젝트에 추가합니다. 그런 다음 문서화되지 않은 함수를 호출하려는 각 클래스에 대해 하나의 인터페이스 블록을 만들고 각각에 '(문서화되지 않음)'범주를 지정하십시오. 그런 다음 PCH에 하나의 헤더 파일을 포함하십시오. 이렇게하면 원래 헤더 파일이 깨끗하게 유지되고 유지 관리 할 파일이 하나 뿐이며 PCH에서 한 줄을 주석 처리하여 모든 경고를 다시 활성화 할 수 있습니다.
또한 '(감가 상각)'카테고리의 'Depreciated.h'에서 감가 상각 된 함수에도이 방법을 사용합니다.
가장 좋은 점은 개별 프로토 타입에 주석을 달거나 주석을 제거하여 개별 경고를 선택적으로 활성화 / 비활성화 할 수 있다는 것입니다.
특정 경고를 억제하는 것은 안전하지 않습니다. 컴파일러는 인수의 유형을 알아야하며 올바른 코드를 생성하기 위해 메소드로 리턴해야합니다.
예를 들어 다음과 같은 메서드를 호출하는 경우
[foo doSomethingWithFloat : 1.0];
플로트를 취하고 프로토 타입이 보이지 않으면 컴파일러는 메서드가 플로트가 아닌 double을 취한다고 추측합니다. 이로 인해 충돌이 발생하고 값이 잘못 해석 될 수 있습니다. 위의 예에서 인텔 머신과 같은 리틀 엔디안 머신에서 수신자 메소드는 1이 아닌 0이 전달 된 것으로 간주합니다.
i386 ABI 문서 에서 이유를 읽 거나 경고를 수정할 수 있습니다. :-)
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);