作者:struct_mooc 博客地址:https://www.cnblogs.com/structmooc/p/11318666.html
最近用keil5調試代碼出了一些警告與錯誤,整理如下:
1.warning: #1295-D: Deprecated declaration run_c - give arg types
void run_c();//原函數
void run_c(void);//改正后
對比前面聲明的函數,發現是括號少了一個void,因為我的函數是不帶參的,不加void會有警告的,往括號里加了void之后,重新編譯之后警告消失。
2.warning: #940-D: missing return statement at end of non-void function "Gray_Delay_Run40"
int Gray_Delay_Run40(u16 i)//原函數
{
while(i -- )
{
delay_ms(1);
Gray_Run40();
}
}
int Gray_Delay_Run40(u16 i)//改正1
{
while(i -- )
{
delay_ms(1);
Gray_Run40();
}
return 0;
}
void Gray_Delay_Run40(u16 i)//改正2
{
while(i -- )
{
delay_ms(1);
Gray_Run40();
}
}
因為我函數是int型的,是需要有返回值,但是我沒有return,加入return 0;之后重新編譯警告消失。或者直接把int改成void,同樣編譯后警告消失。
3.warning: #177-D: variable "a" was declared but never referenced
s32 a = 50;//原函數
//s32 a = 50;//改正后
因為我定義了一個變量准備在后面用到,但是后面直接用數字代替了,沒有用到,將這個變量注釋后,重新編譯警告消失。
4.warning: #177-D: function "Delayms" was declared but never referenced
static void Delayms(u16 i)
{
...
}
//static void Delayms(u16 i) //改正后
//{
// ...
//}
這里和第3個錯誤差不多,因為我定義了一個函數准備在后面用到,但是后面沒有用到,將這個函數注釋后,重新編譯警告消失。
5.warning: #128-D: loop is not reachable
這個警告的意思是我無法跳出這個循環,我跳到這行看,發現的確少了一個break,加入之后重新編譯,警告消失!
6.error: At end of source: #67: expected a "}"
這個錯誤很明顯,就是說少了一個括號,因為我是一部分一部分調試的,調試完一部分注釋,最后全部恢復優化,就報了這個錯誤,至於在哪里不知道,因為一點錯誤直接跳轉到最后一行,但是我這個循環里面有上千條代碼,一條一條慢慢過去找不現實。解決辦法是二分法查找,先注釋上半部分代碼,沒了錯誤,那肯定就是在上半部分少了"}",繼續二分法,最后幾十行看看就知道錯在哪里了,加上括號,重新編譯錯誤解決!