我在用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 展开
/*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 展开
4个回答
展开全部
以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中用了哟。
定义一个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" 这个就根据实现情况定。 ./表示当前目录,../表示上级目录。
展开全部
//////////////////////////////////////////////
////////////////////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源文件中!位置没有要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
基本的方法是,把子函数的声明放在头文件中,子函数的实现放在其他的.c文件中。最好不要在.h中包含函数的实现。
如果题主不确定如何编译一个含有多个.c文件的工程,最好干脆不要进行这种分离的尝试。
如果题主不确定如何编译一个含有多个.c文件的工程,最好干脆不要进行这种分离的尝试。
追问
但问题是 一个单片机程序写了2000多行了 代码读起来太困难,你说呢!不分隔一下 怎么给别人看 自己看着都费劲
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写在其他文件,在头文件声明,然后再把头文件include进来就行了
追问
这意思是不能在.h的文件中写函数呗,只能外联一个函数吗!不能在.h中内置吗!
追答
也可以不用头文件,直接include 你的.c文件,那样是可以的。头文件你非要写函数定义的话估计也不是不行,但一般不那么做。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询