久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

一口Linux
認證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
C語言中的短路現(xiàn)象
看了這幾個C語言例子,你一定和我一樣連說5個臥槽,聲音一次比一次大
什么是狀態(tài)機?用C語言實現(xiàn)進程5狀態(tài)模型
C語言操作時間函數(shù),實現(xiàn)定時執(zhí)行某個任務(wù)小程序
C語言:static的一個很實用的小技巧
C語言static關(guān)鍵詞詳解
作者動態(tài) 更多
某通信公司筆試題,你會做幾道?
1星期前
10種初學者最常見的c語言段錯誤實例及原因分析
05-30 12:13
linux系統(tǒng)監(jiān)控工具小神器:btop
05-17 17:37
有沒有權(quán)貴開后門讓子女做軟件開發(fā)人員?
05-10 23:36
一文包你學會網(wǎng)絡(luò)數(shù)據(jù)抓包
03-15 09:26

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

問題描述:

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

粉絲提問

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

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

我把問題簡單整理下:

問題

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

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

解決思路-static

如果我們要使用一個和庫函數(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)在我們想定義一個自己的函數(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ù)應該怎么辦呢?那就必須再增加一個文件,把相關(guān)功能放到另外一個文件中,在同一個文件中是沒有辦法實現(xiàn)的。

上代碼,沒有論據(jù)的知識點都是耍流氓?!疽豢诰^大部分文章都是有實例代碼支撐】

/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)用順序 

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

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 3
收藏 1
關(guān)注 181
成為作者 賺取收益
全部留言
0/200
  • 天賜時間 2020-12-08 09:27
    實力寵粉,解決問題
    回復
  • 川理學子 2020-12-07 00:13
    static函數(shù)有時候確實有妙用,單片機里面想要某個變量只初始化一次也可以用它,哈哈哈
    回復 1條回復