4

Xcode 最近添加了__nonnull,__nullable等属性。但是,旧版本的 clang 和其他编译器不支持它们。

如何以兼容的方式使用这些属性?

我希望这样的事情会奏效:

#ifndef NS_ASSUME_NONNULL_BEGIN
#define __nonnull 
#endif

但它似乎NS_ASSUME_NONNULL_BEGIN不是一个真正的宏,它在 Xcode7 中“未定义”。

这样做是有意义的:

#if !defined(__is_identifier) || __is_identifier(__nonnull)
#define __nonnull
#define __nullable
#endif

但 Xcode 6 因“token is not a valid binary operator in a preprocessor subexpression”错误而窒息。

4

1 回答 1

4

正如问题中所解释的,所有好的方法似乎都不起作用。最直白的是:

#if !defined(__clang_major__) || __clang_major__ < 7
#define __nonnull
#define __nullable
#endif
于 2015-06-29T09:05:21.830 回答