打印

keil中写程序的问题

[复制链接]
1713|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
始于116|  楼主 | 2014-3-9 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么一个数组写到.h中会报错,多次重复定义,而写到.c里就没有任何问题???写的是一个stm32的程序。。。。求大神解释

相关帖子

沙发
ayb_ice| | 2014-3-9 16:23 | 只看该作者
被多次包含了嘛

使用特权

评论回复
板凳
dirtwillfly| | 2014-3-9 22:12 | 只看该作者
楼主要用好:#ifndef

使用特权

评论回复
地板
天风立马| | 2014-3-9 22:29 | 只看该作者
一楼为你分析了此次问题原因,二楼为你指点了方法。查查资料,几个预定义还是很有用的。

使用特权

评论回复
5
as564335sa| | 2014-3-9 22:52 | 只看该作者
:D

使用特权

评论回复
6
zwp0822| | 2014-3-10 09:14 | 只看该作者
因为你的这个.h文件被多处包含,所以就重复定义了,你可以在一个.c文件里面定义,在.h文件里面声明;或者向楼上所说,用条件编译。

使用特权

评论回复
7
江枫渔火| | 2014-3-10 09:18 | 只看该作者
除了你确定此头文件只会被一个源文件包含使用,否则是禁止在头文件里定义。

申明是告诉编译器存在这么一个符号,而定义是确确实实的让编译器分配下这个符号指向的内存空间,如果发生重复引用头文件,那定义就会重复分配空间,这是不允许的。

使用特权

评论回复
8
始于116|  楼主 | 2014-3-10 11:08 | 只看该作者
dirtwillfly 发表于 2014-3-9 22:12
楼主要用好:#ifndef

是写在ifdef中了呀?

使用特权

评论回复
9
frlop| | 2014-3-10 11:56 | 只看该作者
.h声明,.C定义。养个好习惯这种就没这种事了。

使用特权

评论回复
10
始于116|  楼主 | 2014-3-14 08:47 | 只看该作者
frlop 发表于 2014-3-10 11:56
.h声明,.C定义。养个好习惯这种就没这种事了。

恩,有道理。。。。

使用特权

评论回复
11
爱炫小王子| | 2014-3-14 09:51 | 只看该作者
因为你的数组定义在头文件中,也就是实体。它的作用范围是全局的,除非你加static。所以当你在两个或以上的.c文件中包含这个头文件的时候,就相当于定义了两个或以上的相同名字的实体,而且作用范围都是全局的,这显然是错的。
当两个同名的static变量在不同的源文件中,编译器会给每个变量分配不同的存储空间,这是可以的,而当是全局变量时就会出现错误,因为编译器无法为你定义的实体分配存储空间。
所以一般的原则就是只在.h中声明,这样就算重复包含也不会出错。但是要加上预编译头。像int a = 5;这样的实体就不要放在头文件中了。

使用特权

评论回复
12
lanchong1980| | 2014-3-14 11:31 | 只看该作者
楼上不愧是 。。。。。是什么来

使用特权

评论回复
13
coody| | 2014-3-14 14:11 | 只看该作者
避免重复包含

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

199

帖子

2

粉丝