【STM32】#147-D: declaration is incompatible 類錯誤的解決方式

declaration is incompatible ,定義不兼容的意思

最基本的錯誤就是定義和聲明的時候在參數裏出現了數據格式,參數數量或形參名字的不一致導致的


但是很多情況下不是這個問題導致的,而是一些其他的問題間接觸發的:

  • (1)使用未定義函數(一般是聲明順序問題)

對於這種問題,可以把B函數放到A函數之前,也可以採用先聲明後定義的辦法解決,把所有的聲明都放在頭文件中,可以方便調試的時候理清邏輯。

 

  • (2)筆者遇到的問題,來自一個隱祕的定義衝突

問題描述:

編譯時報錯:

..\HARDWARE\Framework\framework.c(32): error:  #147-D: declaration is incompatible with "void text_erase(u16, u16, u8)"  (declared at line 19 of "..\HARDWARE\Framework\framework.h")

但實際定義完全一樣(如圖)。

經過排查,發現問題來自於我在串口屏驅動中添加的幾個宏定義:

u8,u16,u32這些數據類型已經在stm32的自帶庫“sys.h”包含,而且此宏定義和“sys.h”聲明中數據類型不一致,因而觸發此問題。

解決辦法:註釋掉這三句宏定義,直接使用 #include “sys.h” 即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章