在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言-函數未聲明引發的怪異現象

嵌入式那些事 ? 來源:嵌入式那些事 ? 2023-04-04 09:36 ? 次閱讀

1.問題描述

最近進行ARM嵌入式系統開發過程中遇到一個問題,就是打印浮點數據不正確。這里的打印函數在其他文件定義的,在main.c中調用了打印函數,但是并沒有include打印函數的頭文件,編譯能夠正確的編譯過去,但是打印浮點數據時浮點數據的內容始終不正確,比如kprintf("float_num:%f ", 12.06);實際顯示的內容可能是0.0000。

最開始以為浮點的堆棧處理問題,后來檢查浮點的入棧和出棧并沒有什么問題,后來調試發現kprintf("float_num:%f ", 12.06);這句代碼的匯編格式使用d0在保存浮點數據,正常來說ARM傳遞參數使用的是r0,r1,r2,r3寄存器或者堆棧,這明顯就不對,采用的貌似是編譯器的通用參數處理方式。當然了導致這個問題的原因就是kprintf這個函數并未聲明,因為kprintf函數未聲明,編譯器在編譯當前文件時,并不知道kprintf函數的參數及順序,因此采用的貌似是編譯器的通用參數處理方式。

kprintf函數未聲明時,kprintf("float_num:%f ", 12.06);對應的匯編代碼為:

vldrd0,[pc,#188]
ldrr0,[pc,#200]
blkprintf

kprintf函數在main.c文件中聲明了時,kprintf("float_num:%f ", 12.06);對應的匯編代碼為:

addr3,pc,#252
ldrdr2,r3,[r3]
ldrr0,[pc,#188]
blkprintf

函數未聲明除了造成上述問題之外(參數傳入的不正確導致結果出錯),也可能導致結果正確,但是返回的結果不正確(比如一個函數返回double型的結果,如果函數未聲明就使用,可能會返回4字節的結果,導致結果返回錯誤)。

函數未聲明時,kprintf("int_num:%d ", 15);能夠正確的顯示,因為此時15這個值能夠通過普通寄存器(r0/r1/r2/r3)傳遞,因此不會出現打印浮點數的問題。如果傳遞的參數或者返回的值,不能通過普通寄存器(r0/r1/r2/r3)傳遞時,就可能出現奇怪的問題了。

2.問題解決方法

解決這個問題的方法自然是,在使用到kprintf的文件中include打印函數kprintf的頭文件。

3.小結

對于開發過程中,如果編譯時提示"warning: implicit declaration of function 'xxx'"這類的信息,一定還是加上這些函數的聲明。如果不添加函數聲明,編譯雖然能夠通過,但是遇到我上面提及的怪異問題,調試可能都不知如何下手,謹記吧。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9270

    瀏覽量

    373523
  • 嵌入式
    +關注

    關注

    5125

    文章

    19438

    瀏覽量

    313072
  • C語言
    +關注

    關注

    180

    文章

    7628

    瀏覽量

    139696
  • 函數
    +關注

    關注

    3

    文章

    4365

    瀏覽量

    63852
  • 編譯
    +關注

    關注

    0

    文章

    674

    瀏覽量

    33602

原文標題:C語言-函數未聲明引發的怪異現象

文章出處:【微信號:嵌入式那些事,微信公眾號:嵌入式那些事】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    編譯后提示這個函數未聲明

    編譯后提示這個函數未聲明function "InitXintf" declared implicitly FLASH.c /lab14-39VF800/SRC line 16 C/
    發表于 08-30 11:03

    為什么編譯時有Warning說這個函數有定義未聲明

    在LWIP1.3里面dns.c里面有定義了一個static u32_t dns_lookup(const char *name){。。。。}并且在dns.h里面進行了聲明static u32_t dns_lookup(const char *name);為什么編譯時有Wa
    發表于 10-30 22:29

    在nuclei studio中編譯遇到的兩個問題,計數模塊顯示未聲明和如何在c工程中添加硬件描述語言

    core_feature_base.h,卻可以在編譯的時候使用core_feature_base.h聲明計數模塊函數 2.使用nice接口的Verilog文件 可以與c語言軟件程序一
    發表于 08-16 07:06

    C語言回調函數學習

    對指針的應用是C語言編程的精髓所在,而回調函數就是C語言里面對函數指針的高級應用。簡而言之,回調
    發表于 05-27 09:44 ?7268次閱讀

    C語言標準庫函數

    C語言標準庫函數,使用C語言編程時,常用到的函數
    發表于 05-11 16:41 ?0次下載

    C語言scanf函數詳解

    C語言scanf函數詳細解釋
    發表于 05-15 09:20 ?6次下載

    基于C語言標準庫函數

    基于C語言標準庫函數
    發表于 10-23 17:41 ?11次下載
    基于<b class='flag-5'>C</b><b class='flag-5'>語言</b>標準庫<b class='flag-5'>函數</b>

    C語言聲明和定義與引用說明

    本文檔的主要內容詳細介紹的是C語言聲明和定義與引用說明
    發表于 07-29 08:00 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>聲明</b>和定義與引用說明

    剖析什么是C語言中的隱式函數聲明

    「1、什么是C語言的隱式函數聲明」 在C語言中,函數
    的頭像 發表于 05-25 09:38 ?4127次閱讀
    剖析什么是<b class='flag-5'>C</b><b class='flag-5'>語言</b>中的隱式<b class='flag-5'>函數</b><b class='flag-5'>聲明</b>

    51單片機實戰教程之C語言基礎(五 C語言函數及其定義)

    雖然部分C語言函數的返回值與其參數存在對應關系,但是它與數學里的函數不是同一概念。有的書上把它定義為完成特定任務的代碼集合。 C
    發表于 11-21 09:51 ?31次下載
    51單片機實戰教程之<b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎(五 <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>函數</b>及其定義)

    C語言函數速查手冊

    c\c++語言函數速查手冊
    發表于 06-30 14:48 ?11次下載

    C語言-函數的定義、聲明、傳參

    C語言函數是非常重要的知識點,一個完整的C語言程序就是由主函數和各個子
    的頭像 發表于 08-14 09:57 ?2180次閱讀

    隱式函數聲明會導致系統怎么樣?

    C語言中,函數在調用前不一定非要聲明被調用的函數。如果沒有聲明的話,那么編譯器會自動按照一種隱
    的頭像 發表于 02-15 15:02 ?1215次閱讀

    C語言函數參數介紹

    C語言數組元素作函數實參 數組元素可以用作函數實參,不能用作形參。 C語言在用數組元素作
    的頭像 發表于 03-10 14:30 ?2696次閱讀

    C語言內部函數與外部函數介紹

    一般為了敘述方便,把建立存儲空間的聲明稱定義,而把不需要建立存儲空間的聲明稱為聲明。 在函數中出現的對變量的聲明,除了用extern
    的頭像 發表于 03-10 14:36 ?1362次閱讀
    主站蜘蛛池模板: 亚洲影视网 | 俄罗斯欧美色黄激情 | 亚洲小便 | 日日干夜夜操s8 | 亚洲 美腿 欧美 偷拍 | 亚洲一级影院 | 在线观看免费av网站 | 亚洲综合色就色手机在线观看 | 亚洲成人网在线播放 | 九色国产在视频线精品视频 | 色综合狠狠 | ww欧洲ww在线视频免费观看 | 中文字幕第8页 | 在线视频毛片 | 成人18毛片 | 天天影视网天天影网 | 天天色天天操天天 | 天天射天天爽 | 天天操天天添 | 色老头性xxxx老头视频 | 欧美视频一区二区三区在线观看 | 国产小福利| 四虎国产精品永久在线网址 | 中文字幕一二三四区2021 | 日本aaaa| 九色视频在线播放 | 国产高清一级在线观看 | 国产精品久久久久久久免费大片 | 天天操天天干天搞天天射 | 国产成人精品曰本亚洲77美色 | 免费观看四虎精品国产永久 | 午夜精品在线 | 国产一区二区三区欧美精品 | 在线观看视频你懂得 | 欧美黄色高清 | 岛国毛片在线观看 | 免费jyzzjyzz在线播放大全 | 亚在线| 午夜国产精品久久影院 | 四虎在线免费视频 | 高清视频黄色录像免费 |