标题: 请问大家一个关于写C语言main函数的问题 [打印本页]

作者: gaoky    时间: 2020-3-20 22:52
标题: 请问大家一个关于写C语言main函数的问题
  看到一个程序,在main函数之后是很正常的初始化,但这之前怎么又是void KeyScan();如图上红色标注的这些,这些子函数程序后面已经写了,为什么前面还要再调用#include "STC15.H"
#include "oled.h"
#include "ds18b20.h"

#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟

sbit LEDG = P5^5;
sbit BUZZ = P1^3;
sbit RELAY = P3^7;  //0开1关

//定义按键IO
sbit KEY1 = P3^6;
sbit KEY2 = P3^3;
sbit KEY3 = P3^2;

//按键码,为0时没有键按下
char KeyCode = 0;
//水位百分比,分0%-20%-40%-60%-80%-100%
int WaterLev = 0;     
//设置的水温
int TempSet = 300;   

int Flag1s = 0;
int FlagBuzz = 0;

void Timer0Init();
void KeyScan();
void KeyAction();
void STC15AdcInit(uchar ch);
void STC15AdcStart(uchar ch);

void main()
{
    OledInit();
        OledShowStr(32, 0, "Temp Box");
    OledShowStr(0, 2, "Temperature:");
    OledShowStr(0, 4, "Water Level:");
    OledShowStr(24, 6,   "Set Temp:");
    OledShowTemp(96, 6, TempSet);
    Start18B20();
    STC15AdcInit(5);
    STC15AdcStart(5);
    Timer0Init();



作者: xxpp2011    时间: 2020-3-20 23:12
子函数放在主函数前面,就不用再声明一遍,子函数放在主函数后面,就需要在主函数前面声明函数名。
你可以把void main()(xxx)挪到整个main.c的最后面,就可以删掉红色部分了。
作者: csmyldl    时间: 2020-3-20 23:44
这个叫做函数声明;主要作用是帮助编译系统找到这些函数的位置;因为这些函数放在main()函数后,是由main()函数调用执行,如果不声明,main()函数不知道。另一种做法是把main()函数移至最后,就不需要这样声明了
作者: cphnkj188    时间: 2020-3-21 08:32
#include "STC15.H"是头文件,必须有的,红色的那些是子函数,是需要提前声明的
作者: cjjdemon    时间: 2020-3-21 15:25
C语言基础太薄弱,建议认真看一下
作者: TTQ001    时间: 2020-3-22 01:50
你将所有子例程放在main函数后面,因此需要在main函数之前声明它们,以避免编译错误。
作者: Zealot110    时间: 2020-3-22 18:23
但这之前怎么又是void KeyScan();如图上红色标注的这些,这些子函数程序后面已经写了,为什么前面还要再调用
---那些红色部分不是调用,是声明。按语法规则,有如下两种情况需声明:
   1、若其它文件的函数要被本文件调用,需事先声明
   2、若本文件内的函数想要被行号小于自己的函数调用,需要在调用之前事先声明




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1