source

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

manysource 2023. 5. 15. 22:21

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

Xcode 9를 사용할 때 다음과 같은 몇 가지 컴파일러 경고가 있습니다.This function declaration is not a prototype추가할 것을 제안합니다.void메서드 본문으로 이동하면 해결됩니다.내가 안고 있는 문제는 그 경고들이 시스템 API에 대해서도 던져진다는 것입니다.UIApplication대리인-대리인:

- (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

이제 저는 대리인 방법이 장기적으로 여전히 효과가 있을지 아니면 애플이 그것을 삽입할지 궁금합니다.void최신 iOS 11 베타 버전.저는 궁금합니다 왜냐하면 만약 제가 포함한다면.voidbody, Xcode는 Method-Selector가 일치하지 않는 것에 대해 불평할 것입니다.지금까지 동일한 문제를 경험한 사람이 있습니까?

빈 괄호가 있는 블록 선언:

void (^)()

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

void (*)()

인수가 없는 것은 아닙니다.이는 인수가 지정되지 않음을 의미하므로 다음과 같은 방법으로 호출할 수 있으므로 버그로 가는 길을 열어줍니다.

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

매개 변수가 없는 블록을 선언할 때는 항상 다음을 사용합니다.

void (^)(void)

Apple은 모든 곳에서 이 작업을 제대로 수행하지 못했으며 호환성을 이유로 이전 API에 대해 수정하지 않았을 것입니다.새로운 API로 이동할 때까지 경고를 유지해야 합니다.

또한 해당 경고를 해제할 수 있습니다.-Wstrict-prototypes): 여기에 이미지 설명 입력

또는 사용#pragma(고맙다 @svdisk):

#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에 대한 논의 또는 오픈 레이더의 버그를 참조하십시오.

API의 내부 작업에는 변화가 없으며 모든 코드는 계속 작동합니다.우리는 API가 필요한 만큼 좋지 않다는 것만 알게 될 것입니다.

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