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 上把程式寫好,但是編譯的時候告訴它我們要執行...