1

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

产生“已定义”的宏扩展具有未定义的行为

像这样:

#if MIXPANEL_FLUSH_IMMEDIATELY // ==> Warning: Macro expansion producing ...
    [self flush];
#endif

和这个:

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

1 回答 1

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

我把它修好了:

#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

我像这样分离了宏“SCENEKIT_SDK_AVAILABLE”,警告消失了。

你可以试试我的方法。

于 2018-04-12T09:45:38.683 回答