打印

为什么还要#include "Delay.c?

[复制链接]
5481|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doublers|  楼主 | 2013-8-4 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 doublers 于 2013-8-4 16:35 编辑

在包含自己的函数时大侠们说仅需包含函数的头文件即可(即.h文件),无需包含功能文件(即.c文件)。自己如是做却不能实现,不知何故。

如下程序要用到延时函数,按说只需#include  "Delay.h"就可以了
但是我测试的时候必须#include  "Delay.c",否则会报错,为什么?

如果将#include  "Delay.c"语句屏蔽了会出现如下的错误提示:

Error[e46]: Undefined external "Delay" referred in test ( C:\Documents and Settings\Administrator\桌面\新建文件夹\Debug\Obj\test.r43 )



程序如下:

//程序功能:实现流水灯"流动"
//硬件电路:P2口接LED,低电平点亮

#include  <msp430x16x.h>           //包含头文件

#include  "Delay.h"                      //包含自己函数的头文件
#include  "Delay.c"                      //根据大侠们所说此条语句应该不需要啊?????


void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗
  
  P2SEL = 0;                   //设置P2口为I/O端口功能  
  P2DIR = 0xff;               //设置P2口为输出状态;
   
  while(1)
        {
            j=0xFE;
            for(i=0;i<8;i++)                 
               {
                    P2OUT=j;
                     j=j<<1|1;
                     Delay(3000);                                                        
                }
                 P2OUT=0xff;
                 Delay(3000);
        }
}



所包含的自己的函数内容:
===================================

"Delay.h"内容:

void Delay(int n);

================
"Delay.c"内容:

void Delay(int n)
{
     while(n!=0)
         {
          n--;
         }
}

=================
====================================















相关帖子

沙发
fe07fe| | 2013-8-4 10:27 | 只看该作者
这个我没细究,有些网上的标准程序,源文件只包含.H文件,编译器中加入.C文件应该是这样的吧。

使用特权

评论回复
板凳
dirtwillfly| | 2013-8-4 10:48 | 只看该作者
这是谁写的代码?
一般#include后面都是头文件

使用特权

评论回复
地板
令狐神逸| | 2013-8-4 10:59 | 只看该作者
本人将于3分钟内完全忘记该文内容!故本人不能对该文负任何责任,以上内容为本人复制,
如有问题,请与作者联系,与本人一点,一丝,一毫,一纳米…..关系都没有。

使用特权

评论回复
5
doublers|  楼主 | 2013-8-4 17:24 | 只看该作者
dirtwillfly 发表于 2013-8-4 10:48
这是谁写的代码?
一般#include后面都是头文件

一般#include后面都是头文件.,但是我的程序中如果没有#include "Delay.c就会报错,不知道为什么

使用特权

评论回复
6
南宫云明| | 2013-8-4 17:44 | 只看该作者
本帖最后由 南宫云明 于 2013-8-4 17:51 编辑

你在
"Delay.h"内容中改:
extern void Delay(int n);


或者你工程里没有把delay.c这个文件加进去。。。

使用特权

评论回复
7
minDragon| | 2013-8-4 20:11 | 只看该作者
楼上说的extern void Delay(int n);是正确的 但除了这一步,
应该还要才Delay.c加上#include“Delay.h”
而且你所用到的int是否要加上#include<msp430x16x.h>我没去验证
所以 你可以这样修改一下
主函数:
       #include  <msp430x16x.h>           //包含头文件
       #include  "Delay.h"                //包含自己函数的头文件
#include  "Delay.c"这句不要

"Delay.h"内容:
      #include  <msp430x16x.h>
      extern void Delay(int n);
"Delay.c"内容:
      #include  <msp430x16x.h>
      #include  "Delay.h"
然后其他不变~
你试试看吧~今天写模块化的时候因为一些小错误也遇到了一些重复定义的小问题~还是解决了~

使用特权

评论回复
8
dirtwillfly| | 2013-8-4 20:14 | 只看该作者
doublers 发表于 2013-8-4 17:24
一般#include后面都是头文件.,但是我的程序中如果没有#include "Delay.c就会报错,不知道为什么 ...

其实他这个Delay.c就包含了.h的功能。这段代码的作者把一堆程序代码都放一个.c文件里了,不提倡这样做

使用特权

评论回复
9
john_lee| | 2013-8-5 02:11 | 只看该作者
楼主遇到的报错是链接器的报错,显然是楼主没有把delay.c加入工程。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
原野之狼 + 2 赞一个!
10
dianzijiangren| | 2013-8-5 06:51 | 只看该作者
delay.c要加入工程啊少年

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
原野之狼 + 2 很给力!
11
lk07828| | 2013-8-5 09:22 | 只看该作者
版主一眼就看出来了

使用特权

评论回复
12
LxiaoseI| | 2013-8-5 10:29 | 只看该作者
不規范

使用特权

评论回复
13
qzc13457| | 2013-8-5 11:05 | 只看该作者
你工程里没有把delay.c这个文件加进去

使用特权

评论回复
14
coody| | 2013-8-5 11:09 | 只看该作者
从来不include程序文件的路过,只包含头文件

使用特权

评论回复
15
江枫渔火| | 2013-8-5 12:12 | 只看该作者
没加入工程

使用特权

评论回复
16
refee| | 2013-8-5 15:21 | 只看该作者
john_lee 发表于 2013-8-5 02:11
楼主遇到的报错是链接器的报错,显然是楼主没有把delay.c加入工程。

+10086 ;P

使用特权

评论回复
17
sysdriver| | 2013-8-5 20:43 | 只看该作者
不要想的太复杂,include就只是包含的意思,你不把函数包含进来,调用就会报错。

包含.h,和包含.C没什么区别,还不是一样包含文件放进来。只是大部分的人都很少这样写而已,也不知道哪个奇葩写出来的。

使用特权

评论回复
18
草民| | 2013-8-5 22:55 | 只看该作者
sysdriver 发表于 2013-8-5 20:43
不要想的太复杂,include就只是包含的意思,你不把函数包含进来,调用就会报错。

包含.h,和包含.C没什么 ...

是滴

使用特权

评论回复
19
huazhongwang| | 2013-8-6 01:16 | 只看该作者
7楼正解,试完若不行,估计就是版主说的.c 没加入工程了

使用特权

评论回复
20
coody| | 2013-8-6 10:36 | 只看该作者
sysdriver 发表于 2013-8-5 20:43
不要想的太复杂,include就只是包含的意思,你不把函数包含进来,调用就会报错。

包含.h,和包含.C没什么 ...

如果你仿真时,就会发现,看到的情况不同的。

使用特权

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

本版积分规则

13

主题

37

帖子

0

粉丝