99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

一口Linux
認證:優質創作者
所在專題目錄 查看專題
C語言中的短路現象
看了這幾個C語言例子,你一定和我一樣連說5個臥槽,聲音一次比一次大
什么是狀態機?用C語言實現進程5狀態模型
C語言操作時間函數,實現定時執行某個任務小程序
C語言:static的一個很實用的小技巧
C語言static關鍵詞詳解
作者動態 更多
10種初學者最常見的c語言段錯誤實例及原因分析
1星期前
linux系統監控工具小神器:btop
3星期前
有沒有權貴開后門讓子女做軟件開發人員?
05-10 23:36
一文包你學會網絡數據抓包
03-15 09:26
C語言初學者編程水平上不來?不妨嘗試這10個C語言例子
03-14 20:31

C語言:static的一個很實用的小技巧

問題描述:

某個函數fun_1()是在lib內,沒法修改的,在程序中大量的使用了該函數,現在想把原本fun_1失效(現在失效的方法是#define fun_1(..)),用另外一個函數fun_2(),可是fun_2最后也需要調用fun_1,上面的失效方法感覺就不行了,請問怎么做才對?

粉絲提問

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

想學習C語言、Linux、驅動、ARM的同學可以加一口君微信,拉你進群。

我把問題簡單整理下:

問題

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

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

解決思路-static

如果我們要使用一個和庫函數相同名字的函數,就要借助static關鍵字。

在函數的返回類型前加上static,就是靜態函數。其特性如下:

  1. 靜態函數只能在聲明它的文件中可見,其他文件不能引用該函數
  2. 不同的文件可以使用相同名字的靜態函數,互不影響
  3. 其他庫如果有相同的函數名,優先使用本文件的靜態函數

舉例

系統調用函數read(),定義如下:

read

現在我們想定義一個自己的函數,名字也是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();
}
 

執行結果

我們可以看到,雖然我們添加了系統調用read()的頭文件,但是調用的是我們自己定義的read()函數。

下面我們來看下,如果我們定義的read函數又想調用系統調用read()函數應該怎么辦呢?那就必須再增加一個文件,把相關功能放到另外一個文件中,在同一個文件中是沒有辦法實現的。

上代碼,沒有論據的知識點都是耍流氓。【一口君絕大部分文章都是有實例代碼支撐】

/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 }

執行結果

由執行結果可知,程序既調用到了我們自己調用的read()函數,也調用到了系統調用函數read().

函數調用順序如下:

調用順序 

問題解決了,你學到了嗎?

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 3
收藏 1
關注 181
成為作者 賺取收益
全部留言
0/200
  • 天賜時間 2020-12-08 09:27
    實力寵粉,解決問題
    回復
  • 川理學子 2020-12-07 00:13
    static函數有時候確實有妙用,單片機里面想要某個變量只初始化一次也可以用它,哈哈哈
    回復 1條回復
主站蜘蛛池模板: 久热免费 | 日日爱666 | 美利坚合众国毛片 | 久久久久久中文 | 国产成人精品免费视频大 | 亚洲国产果冻传媒av在线观看 | 三级网在线观看 | 两人视频在线播放免费观看网站 | 亚洲人av在线影院 | 日本牲交大片免费观看 | 国产熟妇乱子伦hd | 91丨九色丨丰满人妖 | 欧美亚洲婷婷 | 欧美成人一区二区三区在线观看 | 国产人妻人伦精品 | 国产性一交一乱一伦一色一情 | 麻豆91精品 | 免费观看作爱视频网站 | 日本黄色片在线免费观看 | 奶大交一乱一乱一视一频 | 日本成人综合 | 麻豆福利网 | 91看大片| 精品永久久福利一区二区 | 无码国产玉足脚交极品网站 | 乱肉妇精品av | 久久精品人妻系列无码专区 | 欧美自拍区 | 国产色产综合色产在线观看视频 | 日本免费三片在线播放 | av在线超碰 | 丰满妇女做a级毛片免费观看 | 五月丁香六月综合AV | 99免费精品视频 | 性少妇无码播放 | 俺也来俺也去天天综合久久 | 欧美精品在线不卡 | 理论片麻豆 | 国产精品69久久久久孕妇欧美 | 久久综合影院 | 91狠狠综合久久久 |