# Rust 声明宏:
MacroRulesDefinition : | |
macro_rules ! IDENTIFIER MacroRulesDef | |
MacroRulesDef : | |
( MacroRules ) ; | |
| [ MacroRules ] ; | |
| { MacroRules } | |
MacroRules : | |
MacroRule ( ; MacroRule )* ;? | |
MacroRule : | |
MacroMatcher => MacroTranscriber | |
MacroMatcher : | |
( MacroMatch* ) | |
| [ MacroMatch* ] | |
| { MacroMatch* } | |
MacroMatch : | |
Token排除 $ 和 定界符 | |
| MacroMatcher | |
| $ IDENTIFIER : MacroFragSpec | |
| $ ( MacroMatch+ ) MacroRepSep? MacroRepOp | |
MacroFragSpec : | |
block | expr | ident | item | lifetime | literal | |
| meta | pat | path | stmt | tt | ty | vis | |
MacroRepSep : | |
Token排除 定界符 和 重复操作符 | |
MacroRepOp : | |
* | + | ? | |
MacroTranscriber : | |
DelimTokenTree |
# 条件编译:
ConfigurationPredicate : | |
ConfigurationOption | |
| ConfigurationAll | |
| ConfigurationAny | |
| ConfigurationNot | |
ConfigurationOption : | |
IDENTIFIER (= (STRING_LITERAL | RAW_STRING_LITERAL))? | |
ConfigurationAll | |
all ( ConfigurationPredicateList? ) | |
ConfigurationAny | |
any ( ConfigurationPredicateList? ) | |
ConfigurationNot | |
not ( ConfigurationPredicate ) | |
ConfigurationPredicateList | |
ConfigurationPredicate (, ConfigurationPredicate)* ,? |
每种形式的编译条件都有一个计算结果为真或假的配置谓词 (configuration predicate)。谓词是以下内容之一:
- 一个配置选项。如果设置了该选项,则为真,如果未设置则为假。
all()
这样的配置谓词列表,列表内的配置谓词以逗号分隔。如果至少有一个谓词为假,则为假。如果没有谓词,则为真。any()
这样的配置谓词列表,列表内的配置谓词以逗号分隔。如果至少有一个谓词为真,则为真。如果没有谓词,则为假。- 带一个配置谓词的
not()
模式 。如果此谓词为假,整个配置它为真;如果此谓词为真,整个配置为假。
配置选项可以是名称,也可以是键值对,它们可以设置,也可以不设置。名称以单个标识符形式写入,例如 unix
。键值对被写为标识符后跟 =
,然后再跟一个字符串。例如, target_arch=“x86_64”
就是一个配置选项。键在键值对配置选项列表中不是唯一的。例如, feature = "std"
and feature = "serde"
可以同时设置。