性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

一口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) 更多
linux系統(tǒng)監(jiān)控工具小神器:btop
21小時(shí)前
有沒有權(quán)貴開后門讓子女做軟件開發(fā)人員?
1星期前
一文包你學(xué)會(huì)網(wǎng)絡(luò)數(shù)據(jù)抓包
03-15 09:26
C語言初學(xué)者編程水平上不來?不妨嘗試這10個(gè)C語言例子
03-14 20:31
Linux rootfs:如何開機(jī)就自動(dòng)添加某個(gè)用戶?
03-09 22:18

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,上面的失效方法感覺就不行了,請(qǐng)問怎么做才對(duì)?

粉絲提問

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

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

我把問題簡(jiǎ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ù)的知識(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\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),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(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ù)