keil程序中出现的一些错误,warning C206:'initLCD': missing function-prototype
{
static float sumf=0,sumf1=0;
static int freq=0,freq1=0,Phase=0;
Sysinit();
initLCD();
DispHanzi(1,2,4,"电压");
DispHanzi(0,0,4,"频率");
Build target 'Target 1'
compiling 我的程序.c...
我的程序.C(39): warning C206: 'initLCD': missing function-prototype
我的程序.C(40): warning C206: 'DispHanzi': missing function-prototype
我的程序.C(40): error C267: 'DispHanzi': requires ANSI-style prototype 展开
有一种错误很难被判断识别出来,看代码看了半天感觉是不是自己出现幻觉了:这代码有什么问题吗??!!完全没有呀?不会编译器智障了吧!
多文件调用时候容易忽略一个要点,就是宏定义#include "xxx.h"的时候需要注意声明位置,因为这个宏定义本身只是个代码插入作用,所以两个相互调用的头文件同时插入的顺序一定要注意,否则有可能出现:虽然所用函数头文件都包含了,但是仍然编译报错找不到函数原型的问题。
下面的代码就反映了上面的情况,出现在编译main.c文件时func_b函数找不打func_a函数原型的报错,这是代码结构问题,仅仅通过编译器报错提示查看代码内容是查不出来的:
文件a.c
void func_a(void){...}
文件b.c(调用了文件a.c的函数)
void func_b(void){
func_a();...}
文件main.c(调用了文件a.c和b.c的函数)
#include "b.c" /* 包含头文件顺序调换,实际编程中没有文件名顺序,所以很容易出现宏定义顺序颠倒情况 */
#include "a.c"
void main(void){
func_a();...
func_b();...}
{
uchar i;
while(x--)
{
for(i = 0; i < 120; i++) ;
}
改成这样试试
void DelayMS(uint x)
{ uchar i;
for(; x>0; x--)
for(i=0; i<120; i++);
}