生成"已定义"的宏扩展具有未定义的行为

Yuc*_*ong 1 xcode9.3

升级到Xcode 9.3后,我们开始看到很多这样的警告:

生成"已定义"的宏扩展具有未定义的行为

像这样:

#if MIXPANEL_FLUSH_IMMEDIATELY // ==> Warning: Macro expansion producing ...
    [self flush];
#endif
Run Code Online (Sandbox Code Playgroud)

还有这个:

#if !MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT // ==> Warning: Macro expansion producing 
- (void)setValidationEnabled:(BOOL)validationEnabled {
    _validationEnabled = validationEnabled;
    ...
}
#endif
Run Code Online (Sandbox Code Playgroud)

小智 5

我猜宏不能嵌套在Xcode 9.3中.我也有这些警告. SCENEKIT_SDK_AVAILABLE是嵌套的宏

宏被定义为这样,导致警告:

#if TARGET_OS_MAC
    #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT)
#elif TARGET_OS_IPHONE
    #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT)
#endif
Run Code Online (Sandbox Code Playgroud)

我修好了这样的:

#if defined(POP_USE_SCENEKIT)
# define USE_SCENEKIT 1
#else
# define USE_SCENEKIT 0
#endif
#if TARGET_OS_MAC
    #define SCENEKIT_SDK_AVAILABLE USE_SCENEKIT
#elif TARGET_OS_IPHONE
    #define SCENEKIT_SDK_AVAILABLE USE_SCENEKIT
#endif
Run Code Online (Sandbox Code Playgroud)

我就像这样分离了宏"SCENEKIT_SDK_AVAILABLE",警告也没了.

你可以尝试我的方式.