如何定義一個(gè)和庫(kù)函數(shù)名一樣的函數(shù)?
問題描述:
某個(gè)函數(shù)fun_1()是在lib內(nèi),沒法修改的,在程序中大量的使用了該函數(shù),現(xiàn)在想把原本fun_1失效(現(xiàn)在失效的方法是#define fun_1(..)),用另外一個(gè)函數(shù)fun_2(),可是fun_2最后也需要調(diào)用fun_1,上面的失效方法感覺就不行了,請(qǐng)問怎么做才對(duì)?
粉絲提問
粉絲提問,必須安排!一口君實(shí)力寵粉!
想學(xué)習(xí)C語(yǔ)言、Linux、驅(qū)動(dòng)、ARM的同學(xué)可以加一口君微信,拉你進(jìn)群。
我把問題簡(jiǎn)單整理下:
問題我們庫(kù)文件里有個(gè)函數(shù)是read()我們現(xiàn)在要自己定義一個(gè)名字一樣的函數(shù)read(),main()函數(shù)首先調(diào)用我們自己定義的函數(shù)read()自己定義的函數(shù),要再定義庫(kù)文件中的read()函數(shù)。
問題就出在如何讓我們自己定義的read()函數(shù)只調(diào)用lib庫(kù)中的read函數(shù),而不會(huì)調(diào)用自己。
解決思路-static
如果我們要使用一個(gè)和庫(kù)函數(shù)相同名字的函數(shù),就要借助static關(guān)鍵字。
在函數(shù)的返回類型前加上static,就是靜態(tài)函數(shù)。其特性如下:
靜態(tài)函數(shù)只能在聲明它的文件中可見,其他文件不能引用該函數(shù)不同的文件可以使用相同名字的靜態(tài)函數(shù),互不影響其他庫(kù)如果有相同的函數(shù)名,有限使用本文件的靜態(tài)函數(shù)舉例
系統(tǒng)調(diào)用函數(shù)read(),定義如下:
read
現(xiàn)在我們想定義一個(gè)自己的函數(shù),名字也是read,要如何操作呢?
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
static void read()
{
printf("my read func()");
}
int main()
{
read();
}
執(zhí)行結(jié)果
我們可以看到,雖然我們添加了系統(tǒng)調(diào)用read()的頭文件,但是調(diào)用的是我們自己定義的read()函數(shù)。
下面我們來看下,如果我們定義的read函數(shù)又想調(diào)用系統(tǒng)調(diào)用read()函數(shù)應(yīng)該怎么辦呢?那就必須再增加一個(gè)文件,把相關(guān)功能放到另外一個(gè)文件中,在同一個(gè)文件中是沒有辦法實(shí)現(xiàn)的。
上代碼,沒有論據(jù)的知識(shí)點(diǎn)都是耍流氓。【一口君絕大部分文章都是有實(shí)例代碼支撐】
//test.c
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5
6
7 void test()
8 {
9 int fd;
10 char buf[128]={0};
11
12 fd = open("123.c",O_RDWR);
13 if(fd<0)
14 {
15 perror("open fail");
16 return;
17 }
18 read(fd,buf,16);
19 printf("enter test():%s",buf);
20 }
//123.c
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5
6 extern void test();
7 static void read()
8 {
9 printf("my read func()");
10 test();
11 }
12 int main()
13 {
14 read();
15 }
執(zhí)行結(jié)果
執(zhí)行結(jié)果
由執(zhí)行結(jié)果可知,程序既調(diào)用到了我們自己調(diào)用的read()函數(shù),也調(diào)用到了系統(tǒng)調(diào)用函數(shù)read().
函數(shù)調(diào)用順序如下:
調(diào)用順序
問題解決了,你學(xué)到了嗎?
-THE END-

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.1立即下載>> 【限時(shí)下載】ADI中國(guó)三十周年感恩回饋助力企業(yè)升級(jí)!
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨(dú)角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 特朗普要求英特爾首位華人 CEO 辭職
- 6 踢館大廠和微軟,剖析WPS靈犀的AI實(shí)用主義
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 8 谷歌吹響AI沖鋒號(hào),AI還有哪些機(jī)會(huì)
- 9 蘋果把身家押在Siri上:一場(chǎng)輸不起的自我革命
- 10 騰訊米哈游押寶的中國(guó)AI應(yīng)用,正在海外悶聲發(fā)財(cái)