字面量和标识符
数字字面量
FunC 支持十进制和十六进制整数字面量(允许前导零)。
例如,0
、123
、-17
、00987
、0xef
、0xEF
、0x0
、-0xfFAb
、0x0001
、-0
、-0x0
都是有效的数字字面量。
字符串字面量
FunC 中的字符串使用双引号 "
包裹,如 "this is a string"
。不支持特殊符号如 \n
和多行字符串。
可选地,字符串字面量后可以指定类型,如 "string"u
。
支持以下字符串类型:
- 无类型 —— 用于 asm 函数定义和通过 ASCII 字符串定义 slice 常量
s
—— 通过其内容(十六进制编码并可选地位填充)定义原始 slice 常量a
—— 从指定地址创建包含MsgAddressInt
结构的 slice 常量u
—— 创建对应于提供的 ASCII 字符串的十六进制值的 int 常量h
—— 创建字符串的 SHA256 哈希的前 32 位的 int 常量H
—— 创建字符串的 SHA256 哈希的所有 256 位的 int 常量c
—— 创建字符串的 crc32 值的 int 常量
例如,以下值会生成对应的常量:
"string"
变成x{737472696e67}
slice 常量"abcdef"s
变成x{abcdef}
slice 常量"Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF"a
变成x{9FE6666666666666666666666666666666666666666666666666666666666666667_}
slice 常量(addr_std$10 anycast:none$0 workchain_id:int8=0xFF address:bits256=0x33...33
)"NstK"u
变成0x4e73744b
int 常量"transfer(slice, int)"h
变成0x7a62e8a8
int 常量"transfer(slice, int)"H
变成0x7a62e8a8ebac41bd6de16c65e7be363bc2d2cbc6a0873778dead4795c13db979
int 常量"transfer(slice, int)"c
变成2235694568
int 常量