struct student_st {
char c; // 字符
int score; // 整數
const char *name; // 字符串指針
};
struct student_st s1 = {'A', 91, "Alan"};
struct student_st s2 = {
.name = "YunYun",
.c = 'B',
.score = 92,
};
struct student_st s3 = {
c: 'C',
score: 93,
name: "Wood",
};
struct student_st stus[2] = {
{ .c = 'D', .score = 94 }, // 部分初始化,name 自動為 NULL
{ .c = 'D', .score = 94, .name = "Xxx" }, // 完全初始化
};
struct date { int y, m, d; };
struct person { char *name; struct date birthday; };
struct person p = {
.name = "Alice",
.birthday = { .y = 1990, .m = 5, .d = 20 },
};
struct student_st make_student(char c, int score, const char *name) {
return (struct student_st){ .c = c, .score = score, .name = name };
}
// 使用
struct student_st s = make_student('A', 100, "Bob");
#include <assert.h> // 確保結構體大小不意外變化 static_assert(sizeof(struct student_st) == 16, "student_st layout changed");
c = A, score = 91, name = Alan c = B, score = 92, name = YunYun c = C, score = 93, name = Wood
| 編譯器 | 點語法 (C99) | 冒號語法 (GNU) |
|---|---|---|
| GCC ≥ 3.0 | ✅ 完整支持 | ✅ 支持 |
| Clang ≥ 1.0 | ✅ 完整支持 | ✅ 支持 |
| MSVC ≥ 19.0 (VS2015) | ✅ 完整支持 | ❌ 不支持 |
| C++ 編譯器 | ❌ C++ 不支持指定初始化器 (C++20 起部分支持) | ❌ |
結論:現代 C 代碼請優先使用 C99 指定初始化器(點語法),它是可讀性、安全性、可維護性的最佳平衡點。