Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在GCC/Clang上,NULL no-op编译成什么?_Ios_Objective C_Gcc_Clang_Llvm - Fatal编程技术网

Ios 在GCC/Clang上,NULL no-op编译成什么?

Ios 在GCC/Clang上,NULL no-op编译成什么?,ios,objective-c,gcc,clang,llvm,Ios,Objective C,Gcc,Clang,Llvm,在我的代码中,我有几个调试函数,当指定build标志-release时,调用全部替换为NULL(为了性能);例如: self.condition ? NULL : NULL; 其中第一个和第二个null是在预处理中被替换的函数调用 我的问题是,如果有什么的话,这个编译是为了什么?我使用的是苹果的LLVM5.1;显然,对我们来说,这是一个no-op,那么这是否意味着它不会从这行生成任何指令?我希望是这样,因为没有很好的理由实际执行任何操作。我想这取决于上下文 由于self.condition是[

在我的代码中,我有几个调试函数,当指定build标志-release时,调用全部替换为NULL(为了性能);例如:

self.condition ? NULL : NULL;
其中第一个和第二个null是在预处理中被替换的函数调用


我的问题是,如果有什么的话,这个编译是为了什么?我使用的是苹果的LLVM5.1;显然,对我们来说,这是一个no-op,那么这是否意味着它不会从这行生成任何指令?我希望是这样,因为没有很好的理由实际执行任何操作。

我想这取决于上下文

由于
self.condition
[self-condition]
的别名,因此只有当编译器能够肯定地断言
[self-condition]
没有副作用时,才能省略该调用。如果编译器无法确定没有副作用,则可以将整个语句优化为
[self-condition]产生轻微的优化


\u条件?空:空应该是安全的死剥离,因为没有可能产生副作用的相关方法调用。

检查反汇编,这是确保安全的唯一方法。非常好;关于这个调用,您是对的,所以我在条件方法中添加了属性((pure))