我在用C语言写程序的时候,由于main.c中子函数数量过多使得main.c过于啰嗦,我想把这些子函数写到头文件

如题,我该怎么在头文件中定义这个子函数,才能在mian.c中直接调用它。/*main.c*//*warning:controlreachesendofnon-voidfu... 如题,我该怎么在头文件中定义这个子函数,才能在mian.c中直接调用它。
/*main.c*/

/*
warning: control reaches end of non-void function
带有返回值的函数到达结尾后可能并没有返回任何值
*/
#include "define_WDX.h"
#include<avr/delay.h>
#include<avr/interrupt.h>

#define uchar unsigned char //8位
#define uint unsigned int //16位
#define ulong unsigned long //32位

int main()
{
buz_led_out;

while(1)
{
power_LED();
}

}
void power_LED(void)
{
mios_a_setb;
msck_b_setb;

}
/*define_WDX.h*/
#ifndef _DEFINE_WDX_H_
#define _DEFINE_WDX_H_

//===I/O口138扩展IO1~IO4 PB6,PB7===
#define buz_led_out DDRB |= 0xc0 //设置LED状态显示和蜂鸣器控制端口为输出PB6,PB7
// 0 0 蜂鸣器
// 0 1 红灯
// 1 0 黄灯
// 1 1 绿灯

#define mios_a_setb PORTB |= 0x40 //PB6置1
#define mios_a_clr PORTB &= 0xbf //PB6置0

#define msck_b_setb PORTB |= 0x80 //PB7置1
#define msck_b_clr PORTB &= 0x7f //PB7置0

void power_LED (void);

#endif
展开
 我来答
无奈叹水东流
推荐于2016-11-16 · TA获得超过274个赞
知道小有建树答主
回答量:115
采纳率:0%
帮助的人:77.9万
展开全部
以LED为例:
定义一个led.c,一个led.h

把实现的函数都写到led.c文件中,如把以下写入:
void power_LED(void)
{
mios_a_setb;
msck_b_setb;

}
但要注意把一些宏呀,需要的头文件等依赖也添加上。

在led.h中
声明如下:
#ifndef __LED_H__
extern void power_LED (void);

#endif

之后在main.c中,包含头文件
#include"led.h"
就可以直接在main中用了哟。
更多追问追答
追问
这意思是不能在.h的文件中写函数呗,只能外联一个文件吗!不能在.h中内置吗!
那外联的文件的位置有要求吗!!我应该放在那里!
追答
你把函数实现的实体写在.c中,把声明写在.h中,如果有inline关键字声明的内联函数,也可以写在.h中,这样等将来工程大了,便于管理。
如果和main.c写在同一个文件夹下,就直接按我说的包含。

还有一种办法就是另起一个目录,放在和main.c同级,比如led文件夹,然后把led.c led.h放进去。
这样在main.c中包含路径时,为提高可移植性,建议用相对路径。
比如:#include ".\led\led.h" 这个就根据实现情况定。 ./表示当前目录,../表示上级目录。
何渡忘川
2014-09-02 · TA获得超过370个赞
知道小有建树答主
回答量:126
采纳率:0%
帮助的人:94万
展开全部
 
//////////////////////////////////////////////
////////////////////LED_H/////////////////////
//////////////////////////////////////////////

#ifndef  _LED_H_H
#define  _LED_H_H

#define uchar unsigned char     //8位
#define uint unsigned int       //16位
#define ulong unsigned long     //32位

//===I/O口138扩展IO1~IO4  PB6,PB7===
#define buz_led_out DDRB |= 0xc0  //设置LED状态显示和蜂鸣器控制端口为输出PB6,PB7
                                       //                0    0     蜂鸣器
                                       //                0    1     红灯
                                       //                1    0     黄灯                                              
                                       //                1    1     绿灯      


#define mios_a_setb PORTB |= 0x40  //PB6置1
#define mios_a_clr PORTB &= 0xbf   //PB6置0

#define msck_b_setb PORTB |= 0x80  //PB7置1
#define msck_b_clr PORTB &= 0x7f   //PB7置0

void power_LED(void);

#endif








//////////////////////////////////////////////
////////////////////LED_C/////////////////////
//////////////////////////////////////////////
void power_LED(void)
{
mios_a_setb;
msck_b_setb;
}








//////////////////////////////////////////////
////////////////////main.c/////////////////////
//////////////////////////////////////////////
#include "LED.h"
#include "define_WDX.h"
#include<avr/delay.h>
#include<avr/interrupt.h>


extern void power_LED(void);

int main()
{
buz_led_out;

while(1)
{
power_LED();
}

}
更多追问追答
追问
这意思是不能在.h的文件中写函数呗,只能外联一个文件吗!不能在.h中内置吗!
那外联的文件的位置有要求吗!!我应该放在那里!
追答
可以放在.h文件中,只是一般不放在.h 的文件中,而是放在同名的.c或.cpp源文件中!位置没有要求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
WM_THU
2014-09-02 · TA获得超过7163个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3866万
展开全部
基本的方法是,把子函数的声明放在头文件中,子函数的实现放在其他的.c文件中。最好不要在.h中包含函数的实现。
如果题主不确定如何编译一个含有多个.c文件的工程,最好干脆不要进行这种分离的尝试。
追问
但问题是  一个单片机程序写了2000多行了       代码读起来太困难,你说呢!不分隔一下  怎么给别人看   自己看着都费劲
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Realbfs
2014-09-02 · TA获得超过330个赞
知道小有建树答主
回答量:281
采纳率:0%
帮助的人:231万
展开全部
写在其他文件,在头文件声明,然后再把头文件include进来就行了
追问
这意思是不能在.h的文件中写函数呗,只能外联一个函数吗!不能在.h中内置吗!
追答
也可以不用头文件,直接include 你的.c文件,那样是可以的。头文件你非要写函数定义的话估计也不是不行,但一般不那么做。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式