【问题标题】:What naming constraints apply to C# conditional compilation symbols?哪些命名约束适用于 C# 条件编译符号?
【发布时间】:2016-05-09 04:40:25
【问题描述】:

哪些规则适用于 C# 中条件编译符号的名称?

我咨询过#define documentation/define compiler switch documentationC# language specification。 #define 和 /define 文档只是说您可以定义符号名称,并且符号名称不会与变量名称冲突。语言规范说有一个“条件符号”标记,但似乎没有评论什么是有效符号标记 - 我可能没有找对地方?

  • 条件编译符号可以以数字开头吗?
  • 它们是否可以包含特殊字符,例如 . (例如,用于与版本号相关的符号)?不间断的空间怎么样?
  • #、{}、[] 等字符怎么样?

编辑权威文档的链接会很有用

【问题讨论】:

  • 我可以而且愿意。但是权威文档的链接会很有用,因为它似乎很难找到。这肯定不是未定义的行为吗?
  • @Hydrargyrum 看起来有人比我略胜一筹,但这里是link
  • 我已将您的评论纳入您的问题。随意编辑:)

标签: c# syntax conditional-compilation


【解决方案1】:

符号定义见规范2.5.1节:

2.5.1 条件编译符号

#if#elif#else#endif 指令提供的条件编译功能通过预处理表达式 (§2.5.2) 和条件编译符号进行控制。

条件符号
truefalse 以外的任何标识符或关键字

这在same sectiongrammar §C.1.10 下在线反映,但请注意,在线提供的规范适用于非常旧的语言版本,不应用作参考。您可以在 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC#\Specifications\1033 或 download 中找到最新的可用规范(在撰写本文时,它显然仍然是 C# 5.0)。

identifier-or-keyword的定义可以在§B.1.6 Identifiers中找到。

【讨论】:

  • 啊,这很有帮助。谷歌搜索“标识符或关键字”将我带到Section 2.4.2: Identifiers,其中包含 标识符或关键字 的相关语法定义。这些就是我一直在寻找的规则。
  • @Hydrargyrum:太好了!我将使用 identifier-or-keyword 定义(或者至少是它的摘要)更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2014-11-17
  • 2014-12-20
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多