精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

一口Linux
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
C語言中的短路現(xiàn)象
看了這幾個(gè)C語言例子,你一定和我一樣連說5個(gè)臥槽,聲音一次比一次大
什么是狀態(tài)機(jī)?用C語言實(shí)現(xiàn)進(jìn)程5狀態(tài)模型
C語言操作時(shí)間函數(shù),實(shí)現(xiàn)定時(shí)執(zhí)行某個(gè)任務(wù)小程序
C語言:static的一個(gè)很實(shí)用的小技巧
C語言static關(guān)鍵詞詳解
作者動(dòng)態(tài) 更多
iptables -m connlimit導(dǎo)致內(nèi)存不足
2星期前
為什么對技術(shù)人員的考核大多都只看加班時(shí)間?
3星期前
某通信公司筆試題,你會(huì)做幾道?
07-01 21:58
10種初學(xué)者最常見的c語言段錯(cuò)誤實(shí)例及原因分析
05-30 12:13
linux系統(tǒng)監(jiān)控工具小神器:btop
05-17 17:37

C語言:static的一個(gè)很實(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,上面的失效方法感覺就不行了,請問怎么做才對?

粉絲提問

粉絲提問,必須安排!一口君實(shí)力寵粉!

想學(xué)習(xí)C語言、Linux、驅(qū)動(dòng)、ARM的同學(xué)可以加一口君微信,拉你進(jìn)群。

我把問題簡單整理下:

問題

  1. 我們庫文件里有個(gè)函數(shù)是read()
  2. 我們現(xiàn)在要自己定義一個(gè)名字一樣的函數(shù)read(),
  3. main()函數(shù)首先調(diào)用我們自己定義的函數(shù)read()
  4. 自己定義的函數(shù),要再定義庫文件中的read()函數(shù)。

問題就出在如何讓我們自己定義的read()函數(shù)只調(diào)用lib庫中的read函數(shù),而不會(huì)調(diào)用自己。

解決思路-static

如果我們要使用一個(gè)和庫函數(shù)相同名字的函數(shù),就要借助static關(guān)鍵字。

在函數(shù)的返回類型前加上static,就是靜態(tài)函數(shù)。其特性如下:

  1. 靜態(tài)函數(shù)只能在聲明它的文件中可見,其他文件不能引用該函數(shù)
  2. 不同的文件可以使用相同名字的靜態(tài)函數(shù),互不影響
  3. 其他庫如果有相同的函數(shù)名,優(yōu)先使用本文件的靜態(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()\n");
} 
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ù)的知識點(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\n");
 16         return;
 17     }
 18     read(fd,buf,16);
 19     printf("enter test():%s\n",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()\n");
 10     test();
 11 }
 12 int main()
 13 {
 14     read();
 15 }

執(zhí)行結(jié)果

由執(zhí)行結(jié)果可知,程序既調(diào)用到了我們自己調(diào)用的read()函數(shù),也調(diào)用到了系統(tǒng)調(diào)用函數(shù)read().

函數(shù)調(diào)用順序如下:

調(diào)用順序 

問題解決了,你學(xué)到了嗎?

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 3
收藏 1
關(guān)注 181
成為作者 賺取收益
全部留言
0/200
  • 天賜時(shí)間 2020-12-08 09:27
    實(shí)力寵粉,解決問題
    回復(fù)
  • 川理學(xué)子 2020-12-07 00:13
    static函數(shù)有時(shí)候確實(shí)有妙用,單片機(jī)里面想要某個(gè)變量只初始化一次也可以用它,哈哈哈
    回復(fù) 1條回復(fù)
主站蜘蛛池模板: 国产精品一区一区 | 蜜桃av一区二区 | 亚洲欧美字幕 | 天堂tv在线 | 亚洲精品国品乱码久久久久 | 免费国产在线精品一区 | 1234成人站| 五月丁香六月综合缴情基地 | 国产精品成人一区二区三区吃奶 | 女色网站| 玩弄美艳馊子高潮秀色可贪 | 国产精品第二十页 | 两性色午夜视频免费播放" 透明装xxxxx性hd | 三人一起玩弄娇妻高潮 | 国产精品爽 | 亚洲国产另类久久久精品小说 | 在线观看毛片网站 | 丁香少妇激情啪啪 | 欧美牲交黑粗硬大 | 日韩欧美国产91 | 色99久久| 亚洲地址一地址二地址三 | 男人女人真曰批免费观看国产 | 诡异时代全球动漫免费观看 | 无翼乌18禁全肉肉无遮挡彩色 | 我要发达粤语原版在线观看免费 | 乳大有奶水风流少妇 | 嗯脱我内衣吸我奶小内裤的应用 | fc2成人免费人成在线观看播放 | 偷偷做久久久久免费网站 | 免费观看欧美一级大片 | 男人影库 | 日本一区网站 | 中文字幕毛片无码 | 日本在线视频精品 | 伊人黄色片一 | 亚洲成av人片在线观看天堂无码 | 迷失东京纪录片在线观看高清 | 国产性猛交xx乱 | 欧美一区二区福利 | 日本爱爱视频 |