gcc編譯器各種warning 解決方式

2021-06-14 03:43:42 字數 1405 閱讀 2642

warning: implicit declaration of function '***'(函式的隱式說明)

今天在移植gnu-ucos的時候出現乙個問題----warning: implicit declaration of function 'osctxsw' 

經過在網上搜尋發現主要有兩種情況會產生這種問題:

1)沒有把函式所在的c檔案生成.o 目標檔案。

2)在函式所在的c檔案中定義了,但是沒有在與之相關的.h 檔案中宣告。

這裡是第二種情況,但又不全是。通過分析檢視發現函式osctxsw是在 os_cpu_s.s裡面實現的。在這個檔案裡面還有其它靠彙編實現的函式。在這裡需要加乙個標頭檔案對這個函式的宣告。

在include 目錄下增加乙個檔案 os_cpu_s.h ,裡面加入組合語言檔案實現的函式宣告

void  osctxsw(void);
再次編譯沒有 warning。 通過

suggest parentheses around arithmetic in operand of '|'

用gcc編譯程式遇到如下問題:

warning: suggest parentheses around arithmetic in operand of '|'
//gpg4 is setted as lcd_pwren

rgpgup=rgpgup&(~(1<<4))|(1<<4); // pull-up disable

提示建議用括號擴住 '|' 運算,修改為如下形式即可:

//gpg4 is setted as lcd_pwren

rgpgup= (rgpgup&(~(1<<4))) | (1<<4); // pull-up disable

warning: control reaches end of non-void function

出現這個警告說明 某個函式沒有return 乙個數值。 而這個函式的返回是非void的.比如說

int add()

函式返回乙個int型別,在函式體內部卻沒有返回。

warning: function declaration isn't a prototype

如果乙個函式沒有引數,int hello_init(void)  括號裡面沒有加void就會出現此警告。 注意這個void 無論在函式宣告還是定義的時候都要加上!

gcc編譯器簡介

在linux中選擇gcc編譯器的原因是gcc執行效率高。gcc基本用法 gcc options filename 其中options為編譯選項。例子 執行指令 gcc hello.c 則對hello.c進行編譯,如果程式沒有語法錯誤,則產生可執行檔案a.out gcc預設檔名 執行可執行檔案指令 a...

gcc編譯器(二)

靜態庫 工程在呼叫靜態庫時,複製靜態庫源 加長,不節省程式空間字尾名.a 優點 編譯後不需要再依賴庫 以空間換時間 動態庫 工程建立對映關係,每次呼叫都需要去庫中載入,字尾名為.so 共享庫 程式輕便,便於公升級。小tips 所有程式執行都在記憶體中,硬碟只能儲存程式。靜態庫的建立 gcc c 原始...

GCC編譯器學習

不同的平台如x86和arm,一段程式跑起來到最下面會轉成彙編,彙編要轉成機器碼,機器碼會由於硬體平台不同而不同。有時候要程式設計序在arm上跑,必須針對arm寫程式,但是在arm上寫程式很麻煩 沒有很好的開發工具 所以我們就在x86平台上 windows 上把程式寫好,但是編譯的時候告訴它我們要執行...