⑴ keil4如何在編譯時不編譯未調用的函數
會全部編譯的,在鏈接階段,未調用的函數,會自動被優化掉
⑵ C語言什麼情況下函數被調用之前編譯器無法看到該函數的原型
函數在未調用之前,編譯器無法對其編譯,也就看不到函數原型。
⑶ 求解,為什麼一直報函數未調用,明明已經調用了
單片機資源有限,和PC程序可不能比啊。KEIL分許出這個函數未被調用,又不敢不鏈接,只好保留代碼段,而且函數里的局部變數也需要在RAM中保留,無法作為一般的局部變數回收,十分浪費。
一般來說,盡量把不用的函數注釋掉。
如果既不想刪,又不想看到這個警告,那麼可以在初始化的地方這么干:
i=0; //隨便找個變數即可
if(i) //不可能滿足的條件,假調用
{定義到這部分地址去。
⑷ 單片機C語言編程,假如頭文件里的函數沒有被調用,那麼該函數會不會最後編譯出來而佔用內存
沒有用到自然就不會被編譯,就不會占空間
如果頭文件定義有1000個函數
你的程序只用了1個函數
那麼編譯後的程序,只有這一個函數的內容
⑸ VB6 中函數聲明錯誤編譯不通過,如何解決
這句話是錯誤的,只有定義在調用之後的函數才需要聲明,如果定義在調用之前的函數,無需聲明,例子1,定義在調用之後,必須聲明:main(){int f();//這個聲明是必須的printf("%d",f());}int f(){return 1;}例子2,定義在調用之前,無需聲明:int f(){return 1;}main(){/*int f();//這個聲明不需要*/printf("%d",f());}最後,這個其實是歷史遺留問題,以前的效率較低,編譯器多次掃描源程序麻煩,現代編譯器為了實現優化,都會反復多次掃描源程序。
⑹ C51編譯也是出現有函數沒被調用,求解決!!!
有個函數Cls沒有被調用過,所以有這個警告。
解決辦法1,把這個函數刪了或注釋掉
解決辦法2,不理會這個警告,這個警告對你程序的運行沒有影響
解決辦法3,假調用,例如修改main函數如下
void main(void)
{
uchar i;
i=0;
if(i)
{
Cls();
}
InitLCD();
Write_String(0x81,"KeyBoard Test");
Write_String(0xc0,"KeyNumber=");
while(1)
{
ScanKey();
Delay(0xffff);
}
}
⑺ 如下圖,C++編程時函數代碼是灰色的,並且無法被調用,是怎麼回事
你這個裡面有條件編譯,條件不成立,裡面的代碼是不會被編譯的。可以把#ifdef和#endif刪掉;或者在前面加上#define _DEBUG
⑻ keilc中怎麼使一個庫函數不調用時不編譯
它不會被嵌入代碼而佔用空間的,當然動態鏈接庫除外。KEIL把源代碼編譯成最終執行代碼,要經歷兩個過程,一是編譯:即把源文件編譯成中間目標文件,簡單的說是把C文件編譯成.O或.obj文件;二是鏈接,這個是生成可執行文件的關鍵,它會根據MAIN函數頭和各個中斷函數中調用的函數去中間目標文件中選擇對應的代碼並最終打包到一起生成可執行文件。所以,聲明未被用到的函數是不會佔用程序存儲空間的,但是它會被編譯,只是在連接時不會被選用。希望對你有幫助!!!
⑼ 請問在Keil C中對51單片機編程時,頭文件中沒有被調用到的函數怎麼處理
把target options中的device頁中選上"Use LX51 ...",然後在LX51 Misc頁中的Misc Control中填入"REMOVEUNUSED",確認後重新編譯即可自動去掉未調用的函數。
我希望回答問題的人能本著一種解決問題的態度而不是想去批判提問題的人。
—————————來自Just_Engineer的解答,希望可以幫到你。————————————
⑽ C語言中一個函數如果在主函數中沒有調用,會被編譯么
會的,當你運行時,編譯器還要檢查你的函數是否有格式或其它錯誤!