产生“已定义”的宏扩展具有未定义的行为
Posted
技术标签:
【中文标题】产生“已定义”的宏扩展具有未定义的行为【英文标题】:Macro expansion producing 'defined' has undefined behavior 【发布时间】:2018-04-09 21:16:00 【问题描述】:升级到 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
【问题讨论】:
【参考方案1】:我猜宏不能嵌套在 Xcode 9.3 中。 我也有这些警告。
宏是这样定义的,这会导致警告:
#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”,警告消失了。
你可以试试我的方法。
【讨论】:
以上是关于产生“已定义”的宏扩展具有未定义的行为的主要内容,如果未能解决你的问题,请参考以下文章