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
相关产品推荐
相关产品推荐

