【发布时间】:2011-06-13 10:03:05
【问题描述】:
我遇到了一些 obj-c 代码,我想知道是否有办法简化它:
#if ( A && !(B || C)) || ( B || C )
和这个一样吗?
#if ( A || B || C )
如果没有,是否有另一种更易于阅读的表述方式?
[编辑] 我在问这个问题之前尝试了真值表,但我认为我必须遗漏一些东西,因为我怀疑 Foundation.framework/Foundation.h 会采用这种更复杂的形式。有什么好的理由吗?
这是原始代码(来自 Foundation.h):
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
【问题讨论】:
-
为什么不直接实现一个带有结果的小真值表并自己测试呢?只有 8 种不同的输入 |A=true, B=true, C=true | A=真,B=真。 C=假 |等等等等。比较真值表。如果输出相同,那么您的逻辑是等效的。
-
问题标题中的括号与问题本身略有不同。如果标题正确,则“!(B || C)||(B || C)”部分可以替换为“true”,留下“A && true”,相当于A。另一方面,问题版本似乎缺少一对括号,否则您会遇到语法错误。除此之外,我同意其他海报,创建真值表。
-
@Peter Perháč - 感谢您的编辑!
标签: logic