clang中的assign-enum警告是什么?

Gab*_*lla 5 objective-c clang afnetworking

我正在AFNetworking实施,我找到了这个

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wassign-enum"
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error]];
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

(AFHTTPClient:489-492)

assign-enum警告显然被关闭,但我不知道是什么意思.

在这种情况下,clang会发出什么警告?

Car*_*zey 8

在没有clang pragma的情况下发出的警告是:

整数常量不在枚举类型'NSJSONWritingOptions'(又名'enum NSJSONWritingOptions')的范围内

看一下声明NSJSONWritingOptions,我们看到0没有定义的值:

enum {     NSJSONWritingPrettyPrinted = (1UL << 0) }; typedef NSUInteger NSJSONWritingOptions;
Run Code Online (Sandbox Code Playgroud)

文档确实建议传递0,但是没有定义类似的选项NSJSONWritingNoOption = 0,因此我们将一个常量(0)分配给一个枚举类型,该类型没有将0定义为可能的值.

  • @GabrielePetronella Mattt Thompson对NSJSONWritingOptions的关注不多,因为它是Foundation的一部分.但是,将违规的文字强制转换为正确的类型会更好:`options:(NSJSONWritingOptions)0 (2认同)