You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言结构体初始化报错:expected expression before '{' token 问题求助

问题原因 & 解决办法

嘿,这个编译错误的原因其实很直白:编译器在处理main里的struct book b1={...}时,根本不知道struct book是什么东西。

你说自己定义了这个结构体,但从你贴出来的完整代码来看,这个结构体的定义并没有出现在编译器“看得见”的地方——在printbook函数声明和main函数之前,完全没有struct book的定义代码。编译器是从上到下逐行解析代码的,它还没见过这个结构体类型,自然无法理解你用{}做的初始化操作,所以才会抛出error: expected expression before { token的错误。

修复步骤

只需要把struct book的定义移到所有用到这个类型的代码之前,也就是放在printbook函数声明和main函数的前面,让编译器先认识这个结构体类型就行。另外还要补上#include <stdio.h>——你原来的代码里没加这个头文件,printf也会触发编译错误的。

修正后的完整代码如下:

#include <stdio.h>

// 先定义结构体,让编译器提前识别这个类型
struct book {
    char title[50];
    char author[50];
    int id;
};

// 再声明使用该结构体的函数
void printbook(struct book b);

int main() {
    struct book b1={"48 laws of power","robert greene",286502}; 
    printbook(b1);
    return 0;
}

void printbook(struct book b) {
    printf("Book title=%s\n",b.title);
    printf("Book author=%s\n",b.author);
    printf("Book id=%d",b.id);
}

额外小技巧

如果觉得每次写struct book太麻烦,可以用typedef给结构体起个别名,比如:

typedef struct book {
    char title[50];
    char author[50];
    int id;
} Book;

之后就可以直接用Book代替struct book来声明变量和函数参数了,代码会更简洁。

内容的提问来源于stack exchange,提问作者Chiranjit Debnath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:07:43