C/Objective-C delete和nil之间带逗号-它做什么?

C/Objective-C delete和nil之间带逗号-它做什么?,objective-c,c,memory-management,struct,xcode9,Objective C,C,Memory Management,Struct,Xcode9,我将一个带有一些C基础的Objective-C项目升级到Xcode 9,这将产生一个新的警告: 此处可能误用逗号运算符[-Wcomma] 实际上我不确定这句话在做什么,所以我不确定如何处理这个警告。这句话的效果如何 @interface MyClass : NSObject { struct CStruct *myStruct; } ... @end @implementation MyClass - (void)myMethod { delete myStruct, myS

我将一个带有一些C基础的Objective-C项目升级到Xcode 9,这将产生一个新的警告:

此处可能误用逗号运算符[-Wcomma]

实际上我不确定这句话在做什么,所以我不确定如何处理这个警告。这句话的效果如何

@interface MyClass : NSObject {
    struct CStruct *myStruct;
}
...
@end

@implementation MyClass

- (void)myMethod {
    delete myStruct, myStruct = 0;
}

@end

我可以看出,它的目的是将
结构的内容置零,然后将指向它的指针置零,但是下面这一行没有完成的功能是什么呢

delete myStruct; myStruct = 0;

我倾向于猜测这个警告是针对这样一种可能性:编写此类代码的人认为
delete
将对逗号分隔列表的所有表达式进行操作。就我(不完全)所知,这样的假设是不正确的。此外,我倾向于认为,在您的特定示例中,将逗号更改为分号对代码的可观察行为没有任何影响。“但是,下面这一行没有实现的功能是什么?”-它混淆了代码。我不同意@JohnBollinger的观点,我怀疑编译器编写人员知道逗号运算符没有什么好的用途,而且容易被误解,虽然代码编写人员很“聪明”——但也许我只是个愤世嫉俗者;-)。使用分号。[myStruct release];myStruct=nil;这是正确的方法D@GeneCode这是一个C结构,不是Objective-C对象,项目是ARC。那么为什么要在问题中添加Objective-C标记呢?;)我倾向于猜测这个警告是针对这样一种可能性:编写此类代码的人认为
delete
将对逗号分隔列表的所有表达式进行操作。就我(不完全)所知,这样的假设是不正确的。此外,我倾向于认为,在您的特定示例中,将逗号更改为分号对代码的可观察行为没有任何影响。“但是,下面这一行没有实现的功能是什么?”-它混淆了代码。我不同意@JohnBollinger的观点,我怀疑编译器编写人员知道逗号运算符没有什么好的用途,而且容易被误解,虽然代码编写人员很“聪明”——但也许我只是个愤世嫉俗者;-)。使用分号。[myStruct release];myStruct=nil;这是正确的方法D@GeneCode这是一个C结构,不是Objective-C对象,项目是ARC。那么为什么要在问题中添加Objective-C标记呢?;)