Skip to Content

预处理指令(Preprocess)

# 在行首触发预处理指令:编译前按符号条件裁剪源码。适合「同一份代码,编辑器构建多一套调试函数」这类分叉。

条件块

#if EDITOR func Mode() -> string => "编辑器"; #elif SHIPPING func Mode() -> string => "shipping"; #else func Mode() -> string => "默认"; #endif func main() -> int { print(Mode()); return 0; }
默认

宿主没定义 EDITOR,按 0/false 走 #else,Mode() 返回「默认」。符号由宿主注入(DefinedSymbols / SymbolValues),CLI 直跑时全部未定义。

指令集

指令类别形态
#if expr块状条件块起始(独占整行)
#elif expr块状分支
#else / #endif块状兜底 / 结束
#SYM前缀符号已定义 → 激活下一声明/语句
#!SYM前缀取反
#[expr]前缀括号表达式

前缀形贴在单条声明或语句前,只裁剪那一条:

#DEBUG public val Verbose: bool = true;

未定义符号必警

#if / #elif / 前缀指令里的每个符号,只要不在宿主符号集里,一律 MS1214 警告,该警告确保此类错误可见。数值符号可参与表达式比较(#elif DEBUG >= 2)。

注意

  • # 只在行首触发,行中的 # 是普通字符。
  • 预处理发生在编译最前,被裁掉的代码完全不参与解析,分叉两边的语法各自独立成立即可。
最后更新于 2026年10月10日