program tip

Xcode 9의 "이 함수 선언은 프로토 타입이 아닙니다"경고

radiobox 2020. 7. 30. 10:16
반응형

Xcode 9의 "이 함수 선언은 프로토 타입이 아닙니다"경고


Xcode 9를 사용할 때라는 컴파일러 경고가 This function declaration is not a prototype있습니다. void분석법 본문 에 추가 하여 해결하는 것이 좋습니다. 내가 겪고있는 문제는 이러한 경고가 UIApplication대리자 메서드 와 같은 시스템 API에 대해서도 발생한다는 것입니다 .

- (void)application:(UIApplication *)application
    handleActionWithIdentifier:(NSString *)identifier
         forRemoteNotification:(NSDictionary *)userInfo
              withResponseInfo:(NSDictionary *)responseInfo
             completionHandler:(void (^)())completionHandler

이것은 다음과 같이 해결할 수 있습니다.

- (void)application:(UIApplication *)application
    handleActionWithIdentifier:(NSString *)identifier
         forRemoteNotification:(NSDictionary *)userInfo
              withResponseInfo:(NSDictionary *)responseInfo
             completionHandler:(void (^)(void))completionHandler

이제 델리게이트 메서드가 장기적으로 작동하는지 또는 Apple이 void이후 iOS 11 베타 버전에 삽입할지 궁금합니다 . void본문을 포함하면 Xcode가 일치하지 않는 메소드 선택기 (합리적)에 대해 불평 하기 때문에 궁금 합니다. 지금까지 누군가 같은 문제가 발생 했습니까?


빈 괄호가있는 블록 선언 :

void (^)()

빈 괄호가있는 함수 포인터와 동일한 의미를 갖습니다.

void (*)()

인수가 없다는 의미는 아닙니다. 인수가 지정되지 않았으므로 다음과 같은 방법으로 버그를 호출 할 수 있으므로 버그가 발생합니다.

void (^block)() = ...
block();
block(10);
block(@"myString");

매개 변수가없는 블록을 선언 할 때는 항상 다음을 사용하십시오.

void (^)(void)

Apple은 모든 곳에서 올바르게 수행하지 않았으며 호환성 이유로 이전 API의 경우 수정하지 않을 것입니다. 최신 API로 이동할 때까지 경고를 유지해야합니다.

해당 경고를 끌 수도 있습니다 ( -Wstrict-prototypes) :여기에 이미지 설명을 입력하십시오

또는 사용 #pragma( @davidisdk 덕분에 ) :

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wstrict-prototypes"

- (void)application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
forRemoteNotification:(NSDictionary *)userInfo
   withResponseInfo:(NSDictionary *)responseInfo
  completionHandler:(void (^)())completionHandler {

}
#pragma clang diagnostic pop

여기 LLVM 토론 또는 openradar 의 버그를 참조하십시오 .

API의 내부 작업에는 변화가 없었으며 모든 코드는 여전히 작동합니다. 우리는 API가 정상만큼 좋지 않다는 것을 알게 될 것입니다.

참고 URL : https://stackoverflow.com/questions/44473146/this-function-declaration-is-not-a-prototype-warning-in-xcode-9

반응형