C語言中,同一個函數(shù)能不能被定義兩次?
稍微有點C語言基礎(chǔ)的同學(xué),一定知道不能這樣做。
最近有同學(xué)在學(xué)習(xí)STM32,他就發(fā)現(xiàn)了這么一個問題,有些函數(shù)前面加了 __weak,然后這個函數(shù)就可以被重新定義。
這種情況常見于中斷函數(shù)里面,意思就是用戶可以自己定義,也可以用系統(tǒng)提供的。
__weak并不是C語言里面的關(guān)鍵字,具體的實現(xiàn)還是得看編譯器。
比如在keil里面,__weak就是一個宏定義,使用了C語言里面的 attribute 機(jī)制,這個機(jī)制我們在前面也講過,里面可以用 packed aligned unused 等等。
今天我們再來補(bǔ)充一個,weak。
比如在 test.c 文件中定義了函數(shù) test,如果在 main.c 里面又定義了一次,那編譯的時候,肯定會提示函數(shù)重復(fù)定義,一個函數(shù)不能被定義兩次。
但是如果在某個 test 函數(shù)前面加上 __attribute__((weak)),編譯就能順利通過。
并且運(yùn)行的時候,默認(rèn)調(diào)用的也是前面沒有 weak 修飾的函數(shù)。
weak 就是告訴編譯器,該函數(shù)為弱定義,作為備選,如果用戶自己定義了,還是優(yōu)先調(diào)用用戶定義的函數(shù)。
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標(biāo)題:函數(shù)也能重復(fù)定義
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
相關(guān)推薦
在C語言中,宏定義是一種預(yù)處理指令,用于在代碼中定義和使用常量、函數(shù)或代碼片段的替代。
發(fā)表于 08-17 15:33
?889次閱讀
#define命令是C語言中的一個宏定義命令,它用來將一個
發(fā)表于 09-05 10:12
?1281次閱讀
C語言中,結(jié)構(gòu)體能不能相加?
發(fā)表于 12-19 17:04
?1323次閱讀
求助各位大神:
小弟在此感謝:STM32F103,,希望能在一個PWM周期內(nèi)對同一個AD通道采樣兩次?或者多次,可以控制采樣起點,連續(xù)采樣不合適。有什么辦法嗎?類似于在周期下溢點,上溢
發(fā)表于 04-17 07:25
ISO3082中兩個地 GND1和GND2能不能連接到同一個地上
發(fā)表于 12-02 07:29
si4463的發(fā)送和接收r能不能使用同一個頻點,怎么用?
發(fā)表于 09-14 10:07
同一個定時器,比如TIM1能不能設(shè)置通道1位定時器比較,通道2位定時器輸入捕獲
發(fā)表于 10-24 08:10
電池能不能修復(fù)?
電池修復(fù)作為一個新生事物,許多人對它不了解,也有許多人對它一知半解。那么電池到底能不能修復(fù)呢?
發(fā)表于 11-23 10:40
?1101次閱讀
#define命令是C語言中的一個宏定義命令,它用來將一個
發(fā)表于 09-28 16:05
?3485次閱讀
一個C源程序至少包括一個函數(shù)。 C
發(fā)表于 11-26 09:01
?1202次閱讀
最近有位哥問我,如何給C語言中的函數(shù)定義兩個不同的名字?就是這兩個名字都是指向
發(fā)表于 12-19 16:21
?886次閱讀
同VLAN不同的網(wǎng)段能不能互通? 同一個VLAN中的設(shè)備擁有相同的網(wǎng)絡(luò)地址范圍,因此它們可以通過該VLAN進(jìn)行通信。而不同VLAN中的設(shè)備擁有不同的網(wǎng)絡(luò)地址范圍,它們通常不能直接互通。然而,在某些
發(fā)表于 02-04 11:21
?3205次閱讀
用C語言能不能實現(xiàn)一個通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點數(shù)的相加?
發(fā)表于 11-09 11:38
?428次閱讀
C語言中的頭文件能不能重復(fù)包含? 比如代碼寫成這樣,stdio.h 連續(xù)包含了兩次。 #include #include int main(){ printf("helloworld
發(fā)表于 11-26 17:19
?205次閱讀
C語言中申請的堆內(nèi)存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學(xué)過 C++ 的同學(xué),應(yīng)該首先能想到智能指針。 但是這是C
發(fā)表于 11-27 09:33
?145次閱讀
評論