2. 变量与类型
2.1 基本类型
TransPyC 支持 Python 内置类型和 t 模块的扩展 C 类型。
2.1.1 内置类型
生成 C:
2.1.2 t 模块类型
import t
x: t.CChar = 'A' # char
y: t.CShort = 100 # short
z: t.CLong = 1000000L # long
f: t.CFloat = 3.14f # float
d: t.CDouble = 3.14159265 # double
生成 C:
2.1.3 带初始化
2.1.4 仅声明(不初始化)
在初始化表达式中写 c.State 表示"仅声明,不赋初值":
生成 C:
翻译器识别
= c.State后省略= 值部分,只生成声明语句。
2.2 存储修饰符
2.2.1 static
生成 C:
2.2.2 extern
2.2.3 const / volatile
2.3 指针类型
import t
# 整数指针
p: t.CPtr | int # int*
buf: t.CPtr | t.CChar # char*
# 结构体指针
task: t.CPtr | t.CStruct(name="TASK") # struct TASK*
生成 C:
2.4 数组类型
2.4.1 一维数组
生成 C:
2.4.2 数组访问
生成 C:
2.5 类型转换
2.5.1 c.TypeCast
生成 C:
2.5.2 t 模块类型转换
import t
val = t.CInt(some_expr) # ((int)some_expr)
ptr = t.CType(addr, MY_STRUCT, t.CPtr) # ((struct MY_STRUCT *)addr)
2.6 sizeof
# 数组长度
arr: int = [1, 2, 3]
n = len(arr) # sizeof(arr) / sizeof(arr[0])
size = sizeof(int) # sizeof(int)
2.7 类型组合规则
| 运算符按以下优先级合并 C 类型名:
| 优先级 | 规则 | 示例 |
|---|---|---|
| 1 | 存储修饰符优先 | static \| int → static int |
| 2 | 指针置后 | int \| * → int* |
| 3 | 类型合并 | long \| int → long int |
| 4 | struct 优先 | struct \| * → struct * |