文件
JGZ_YES 83fe7bfb83 Initial commit: PazeE Language Alpha-0.1
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 作为中间产物内嵌)
2026-08-02 16:29:31 +08:00

50 行
1.4 KiB
Plaintext

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
// flexarray.pe — 灵活数组成员测试
// 验证 struct 末尾 int data[] 不计入 sizeof,访问时按需扩展
struct Vec {
int len;
int data[]; // 灵活数组成员:长度 0,不计入 sizeof
};
struct Header {
char tag;
int payload[]; // 灵活数组成员(int
};
int main(void)
{
// 1. sizeof 不包含灵活数组(但灵活数组成员的元素对齐仍影响结构体对齐)
printf("sizeof(Vec)=%d (expect 4)\n", sizeof(struct Vec));
printf("sizeof(Header)=%d (expect 4: char+padding 对齐到 int)\n", sizeof(struct Header));
// 2. 通过 malloc 分配足够空间并访问
int n = 5;
struct Vec *v = (struct Vec *)malloc(sizeof(struct Vec) + n * sizeof(int));
v->len = n;
for (int i = 0; i < n; i++) v->data[i] = i * i; // 0,1,4,9,16
printf("len=%d: ", v->len);
for (int i = 0; i < v->len; i++) printf("%d ", v->data[i]);
printf("\n");
// 3. 求和验证
long sum = 0;
for (int i = 0; i < v->len; i++) sum += v->data[i];
printf("sum=%d (expect 30)\n", sum);
free(v);
// 4. Header 灵活数组(char tag + int[]
int m = 3;
struct Header *h = (struct Header *)malloc(sizeof(struct Header) + m * sizeof(int));
h->tag = 'X';
h->payload[0] = 100;
h->payload[1] = 200;
h->payload[2] = 300;
printf("tag=%c payload=%d %d %d\n",
h->tag, h->payload[0], h->payload[1], h->payload[2]);
free(h);
return 0;
}