【发布时间】:2014-08-11 13:21:55
【问题描述】:
如果我有一段用 C# 编写的代码包含在 #if 指令中,那么该指令中可能使用的任何布尔运算符应用什么(如果有)优先级?
换句话说:
#if DEBUG || MYTEST && PLATFORM_WINDOWS
// ... Some code here
#endif
这会被简单地从左到右评估为
#if (DEBUG || MYTEST) && PLATFORM_WINDOWS
同样,会
#if PLATFORM_WINDOWS && DEBUG || MYTEST
被评价为
#if (PLATFORM_WINDOWS && DEBUG) || MYTEST
或者 && vs || 有什么优先顺序?
编辑:明确地说,我很清楚我可以自己运行代码来测试它,而且我已经做到了。我正在寻找一个能给我一些官方信息的答案——参考文档等,这可以让我更深入地了解指令的底层机制。我想知道是否有特定的预期行为,或者这是否纯粹是未定义的。
【问题讨论】:
-
无论如何都应该使用 IMO 括号,以避免思考开销和这种混乱
-
为什么不运行一些测试并告诉我们?这是您自己很容易发现的。
-
@BobHorn 从我的测试中可以看出,它是从左到右评估的。但是,我正在寻找一个更官方的答案(最好是指向一些官方文档的东西)以获得更完整的理解。我自己的测试很好,但很高兴知道我的发现是预期的行为,还是只是恰好现在以这种方式工作的未定义的东西。
-
你已经有了代码。你只需要执行它。这样做会比你花在写这个问题上的时间远远少。
-
@Mehrdad 这不是弄清楚我的程序中发生了什么,这很简单(如上所述,我总是添加括号来澄清评估顺序)。我正在寻找更正式的东西,以更好地理解指令的基本机制。
标签: c# c-preprocessor operator-precedence