PazeE 编译器(.NET 8/C# 实现),直接生成原生 x64/ARM64 机器码,无需 gcc/clang/nasm。 主要特性: - 词法/语法/语义分析、AST 生成、代码生成 - 目标平台:Windows (PE32+)、Linux (ELF64)、macOS (Mach-O 64)、Los4 - 架构:AMD64 与 ARM64 独立后端 - C 语法特性:匿名结构体/联合、位域、灵活数组成员、语句表达式+typeof - printf 颜色格式化、time.get.utc 时区支持 - GUI 支持:Windows (Win11 API)、Los4、Linux (X11)、macOS (ObjC) - Windows GUI 程序无控制台窗口(PE 子系统自动检测) - WiX Bundle 安装器(仅输出 .exe,MSI 作为中间产物内嵌)
54 行
1.1 KiB
Plaintext
54 行
1.1 KiB
Plaintext
// struct.pe — 验证结构体、成员访问、指针、结构体数组
|
|
struct Point {
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
struct Rect {
|
|
struct Point lo;
|
|
struct Point hi;
|
|
};
|
|
|
|
int area(struct Rect r)
|
|
{
|
|
int w = r.hi.x - r.lo.x;
|
|
int h = r.hi.y - r.lo.y;
|
|
return w * h;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
struct Point p;
|
|
p.x = 3;
|
|
p.y = 4;
|
|
printf("p = (%d, %d)\n", p.x, p.y); // (3, 4)
|
|
printf("dist^2 = %d\n", p.x * p.x + p.y * p.y); // 25
|
|
|
|
// 指针访问成员
|
|
struct Point *pp = &p;
|
|
pp->x = 10;
|
|
pp->y = 20;
|
|
printf("pp-> = (%d, %d)\n", pp->x, pp->y); // (10, 20)
|
|
|
|
// 嵌套结构体 + 按值传参
|
|
struct Rect r;
|
|
r.lo.x = 0; r.lo.y = 0;
|
|
r.hi.x = 6; r.hi.y = 7;
|
|
printf("area = %d\n", area(r)); // 42
|
|
|
|
// 结构体数组
|
|
struct Point pts[3];
|
|
for (int i = 0; i < 3; i++) {
|
|
pts[i].x = i;
|
|
pts[i].y = i * i;
|
|
}
|
|
int sx = 0, sy = 0;
|
|
for (int i = 0; i < 3; i++) {
|
|
sx += pts[i].x;
|
|
sy += pts[i].y;
|
|
}
|
|
printf("pts sum = (%d, %d)\n", sx, sy); // (0+1+2, 0+1+4) = (3, 5)
|
|
|
|
return 0;
|
|
}
|