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

未声明同名typedef时,C语言是否始终要求在结构体名称前加‘struct’关键字?

未声明同名typedef时,C语言是否始终要求在结构体名称前加‘struct’关键字?

嘿,这个问题我当初学C的时候可没少踩坑!在《Modern C》这本书里,作者Jens Gustedt就专门聊过这个有点烦人的历史遗留规则:

出于历史原因(又是这个老借口!),我们给结构体定义的名称在使用时必须前面加上struct关键字,这用起来多少有点繁琐。而且很多C语言新手都栽在这儿——忘了加struct关键字,编译器就会抛出一堆让人摸不着头脑的错误。

没错!在你没给结构体用typedef定义别名的情况下,C语言确实要求每次引用这个结构体类型时,都得在名称前加上struct关键字。举个例子,如果你定义了struct Person { char name[20]; int age; };,那声明变量的时候必须写struct Person p;,要是直接写Person p;,编译器绝对会报错,因为它根本认不出单独的Person是个啥类型。

这其实是C语言早期设计留下的小特性——结构体的名称空间和普通变量、函数的名称空间是分开的,不加struct的话,编译器没法区分你说的是结构体类型,还是某个重名的变量或者函数。所以啊,没typedef的情况下,这个struct关键字还真不能省!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:32:59