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 作为中间产物内嵌)
50 行
1.4 KiB
Plaintext
50 行
1.4 KiB
Plaintext
// 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;
|
||
}
|