OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6441|回复: 9

51的C语言和C语言的疑惑

[复制链接]

6

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-11-30
在线时间
0 小时
发表于 2013-4-6 17:49:17 | 显示全部楼层 |阅读模式

例如有2个源文件,main.c和led.c,这两个文件均包含头文件led.h,这是编译出错的信息
而头文件led.h的格式为:
# ifndef LED_H_
# define LED_H_

。。。

# endif

请问为什么还会出现重复定义,这样的错误信息,当我把main.c中的# include "led.h"注释掉时,只是有警告,说没有声明函数,但是下载到板子里正常工作,和预期的一样
而这样在C语言是没有问题的












正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-4-6 18:20:58 | 显示全部楼层
回复【楼主位】YS晓:
---------------------------------
你的_DELAY函数怎么定义的,是不是在.h文件里面定义这个函数了?
如果是就会提示报错的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-11-30
在线时间
0 小时
 楼主| 发表于 2013-4-6 19:41:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
delay函数是在.h文件定义的,根据你说说的改了不在.h里面定义确实编译正确了,但是为什么会这样
# ifndef这个预处理不是为了防止重复定义或者声明的吗
我试过在VC++6.0测试过了这个问题,也是在.h里面定义一个函数
2个不同的源文件里面都包含这个头文件,结果编译正常,且运行正常
难道51的C和标准C语言对于预处理不一样?
回复 支持 反对

使用道具 举报

6

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-11-30
在线时间
0 小时
 楼主| 发表于 2013-4-6 19:46:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不好意思,还有一个问题哦,keil编译51的,在main函数里面注释掉# include "led.h"
编译时出现警告,因为我用了led.h里面声明的函数,所以警告说我在使用该函数前没有声明它(请注意是警告)
那为什么仿真看波形时没有问题,下载入板子时也能够正常运行
麻烦原子哥了!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-4-6 22:45:24 | 显示全部楼层
回复【3楼】YS晓:
---------------------------------
编译器的问题,不同编译器处理方式不一样吧。具体得问MDK去了....

回复【4楼】YS晓:
---------------------------------
说明还是能用。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-11-30
在线时间
0 小时
 楼主| 发表于 2013-4-6 22:49:12 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
+_+
结论居然是编译器的处理不同,谢啦!!
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-4-8 21:37:39 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这个是挺乱的……原子哥
有时候多个C文件里面需要同一个头文件 我全包含了以后。。。
编译就会说multiple defined直接error 
可是只在一个C中包含,却又警告我未定义
难道要我把几个C合并在一起吗……

不知道KEIL MDK里面的C文件之间编译的时候究竟是什么关系……
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-4-8 23:18:11 | 显示全部楼层
回复【7楼】兰斯洛:
---------------------------------
你只要不重复包含就是了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-4-8 23:26:33 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
那头文件里不是有#ifndef吗……还是说KEILC编译器直接无视?
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-4-8 23:57:13 | 显示全部楼层
这个是比较怪,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表