// 信息.h
struct students {
long code;
char *name;
float score[3];
float sum;
};
void default_initiate(struct students stu[]) {
stu[0] = { 20140001, "陳龍", {50.0, 30.0, 89.0} }; // 報錯
}
C 標準規定:頭文件(或全局作用域)僅允許聲明與初始化,不允許賦值語句。stu[0] = {...} 是賦值表達式,必須在函數體內執行。
void default_initiate(struct students stu[]) {
stu[0].code = 20140001;
stu[0].name = "陳龍";
stu[0].score[0] = 50.0f;
stu[0].score[1] = 30.0f;
stu[0].score[2] = 89.0f;
stu[0].sum = 0; // 後續計算
}
// .c 文件
static const struct students default_stu = {
20140001, "陳龍", {50.0f, 30.0f, 89.0f}, 0
};
void default_initiate(struct students stu[]) {
stu[0] = default_stu; // 複製結構體
}
stu[0] = (struct students){
.code = 20140001,
.name = "陳龍",
.score = {50.0f, 30.0f, 89.0f}
};
VS2013/Dev-C++ (GCC) 對 C99 特性支持較好,允許復合字面量賦值;VC6.0/VS2008 僅支持 C89,故報錯。建議項目統一 C99 或 C11 標準(VS2019+ 默認支持)。