[C语言] 头文件中不可以定义全局变量,为什么可以定义结构体

[复制链接]
4548|16
 楼主| yanghelovehuang 发表于 2018-8-27 16:58 | 显示全部楼层 |阅读模式
大家好 在.h文件中不能够定义全局变量,因为会报错:重复定义,但是为什么可以定义结构体呢?为什么结构体就不报重复定义的错误呢?
一叶倾城wwq 发表于 2018-8-27 17:59 | 显示全部楼层
这个需要查阅C99或者ANSI C标准,但估计也不会说是为什么这样规定,只是对于使用者而言仅仅只是“是否需要让其他文件调用该结构体”的问题,看楼下有没有人解答
john_lee 发表于 2018-8-27 18:23 | 显示全部楼层
你所说的“定义结构体”,实际上是不严格的说法。正确的说法是:声明结构体。

声明(declare),是向编译器宣称了一个新的类型。
而定义(define,不要和宏搞混了),是使用一个类型定义一个新的常量或变量。
linqing171 发表于 2018-8-27 20:48 | 显示全部楼层
结构体是类型。类型可以声明多次,好像还可以不一样... ...
结构体类型的变量才是变量。
lddfym 发表于 2018-8-27 21:40 | 显示全部楼层
typedef是类型重定义,即定义了一个数据类型,而非定义了一个变量,故不存在重复定义的问题。
lddfym 发表于 2018-8-27 21:40 | 显示全部楼层
typedef是类型重定义,即定义了一个数据类型,而非定义了一个变量,故不存在重复定义的问题。
ayb_ice 发表于 2018-8-28 08:29 | 显示全部楼层
当然可以定义的,不过要点技巧
w451198326 发表于 2018-8-28 16:31 | 显示全部楼层
应该是声明结构体,定义变量。比如说你定义一个全局变量后,就会在ram内某处开辟一个空间。声明的话当然不会了。同样如果你在头文件中定义结构体类型变量,也会报错
 楼主| yanghelovehuang 发表于 2018-8-28 17:10 | 显示全部楼层
w451198326 发表于 2018-8-28 16:31
应该是声明结构体,定义变量。比如说你定义一个全局变量后,就会在ram内某处开辟一个空间。声明的话当然不会 ...

我在h文件里定义了结构体变量,也没报错,我是这样定义的:
typedef struct{
}VIFI;

extern VIFI vifi_t;
VIFI是结构体类型。

是不是在h文件里定义的全局变量前加个extern就不会报错了。?
mcu5i51 发表于 2018-8-28 17:16 | 显示全部楼层
加个extern 就是声明了;
caijie001 发表于 2018-8-28 19:20 | 显示全部楼层
声明与定义的概念混淆了
caijie001 发表于 2018-8-28 19:20 | 显示全部楼层
yanghelovehuang 发表于 2018-8-28 17:10
我在h文件里定义了结构体变量,也没报错,我是这样定义的:
typedef struct{
}VIFI;

定义了吗?内存在哪呢
 楼主| yanghelovehuang 发表于 2018-8-29 09:19 | 显示全部楼层
caijie001 发表于 2018-8-28 19:20
定义了吗?内存在哪呢

里面的成员只是没写出来而已,这不是为了重点吗。
chongdongchen 发表于 2018-8-29 09:58 | 显示全部楼层
h文件的内容想怎么写都可以,没有任何规定,只受限于你的工程结构。
只不过因为经验的总结,h文件会作一些写法上的限制,就是各种规范。
gnaijnaoul 发表于 2018-8-30 08:25 来自手机 | 显示全部楼层
楼主需要去学习一下c程序编译,链接的原理。编译的过程是。预处理器将c文件包含的头文件展开,将头文件内容添加到c文件形成中间文件,然后编译器再编译这个c文件。
luofeng2g 发表于 2018-8-30 09:26 | 显示全部楼层
declare 和 define
suqiancollege 发表于 2020-4-1 08:29 | 显示全部楼层
本帖最后由 suqiancollege 于 2020-4-1 08:31 编辑

那个不叫定义,叫声明一个结构体
声明(.h):
typedef struct {
                       int a;
                       char b;
}Struct_T;   //这是声明
定义(.c)
Struct_T  kkk; //这是定义,这样kkk里就有a和b两个成员

您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部