问题描述:

某个函数fun_1()是在lib内,没法修改的,在程序中大量的使用了该函数,现在想把原本fun_1失效(现在失效的方法是#define fun_1(..)),用另外一个函数fun_2(),可是fun_2最后也需要调用fun_1,上面的失效方法感觉就不行了,请问怎么做才对?

我把问题简单整理下:

  1. 我们库文件里有个函数是read()
  2. 我们现在要自己定义一个名字一样的函数read(),
  3. main()函数首先调用我们自己定义的函数read()
  4. 自己定义的函数,要再定义库文件中的read()函数。

粉丝提问,必须安排!一口君实力宠粉!

想学习C语言、Linux、驱动、ARM的同学可以加一口君微信,拉你进群。

解决思路-static

如果我们要使用一个和库函数相同名字的函数,就要借助static关键字。

在函数的返回类型前加上static,就是静态函数。其特性如下:

  1. 静态函数只能在声明它的文件中可见,其他文件不能引用该函数
  2. 不同的文件可以使用相同名字的静态函数,互不影响
  3. 其他库如果有相同的函数名,有限使用本文件的静态函数

举例

系统调用函数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.c1 #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 failn");16         return;17     }18     read(fd,buf,16);19     printf("enter test():%sn",buf);20 }//123.c1 #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().

函数调用关系如下:

更多嵌入式Linux 入门的知识 ,请关注 一口Linux

java 函数名调用_粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数...相关推荐

  1. Python什么是闭包、闭包特征、定义闭包传入一个数求和并输出,定义一个装饰器:打印函数运行花费的时间,定义一个类:要求:包含一个对象属性,且用_(单下划线)命名的定义一个类方法(装饰器)

    1. 闭包.闭包特征及应用 1.1 什么是闭包? 闭包就是外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数; 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包 ...

  2. C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数。在主函数中输入两个正整数m和n(m>=1,n>m),统计并输出m和n之间的素数的个数以及这些素数的和。

    原题: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数.在主函数中输入两个正整数m和n(m>=1,n>m),统计并输出m和n之间的素数的个数以及这些素数的 ...

  3. 如何通过JNI在Java中调用C库函数

    使用Java语言进行开发时,可能由于处理速度.硬件控制或者复用既有的C/C++模块等方面的原因,需要Java层与使用C/C++编写的应用.模块或库进行交互,共同完成某些任务.在两者之间充当连接桥梁作用 ...

  4. c和java哪个难_为什么说 C 语言比 Java 难?

    现有答案都提出了各个方面的观点,我觉得很多都挺有道理的. 我这里努力总结整理一下. 从学习角度上说,很多人认为C语言单纯简单,其实比Java要容易. 我认为,如果要把本质学懂,确实如此,而且在学懂C语 ...

  5. C语言与JAVA内存管理_深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

  6. python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

    在python语言中,除了常规变量之外,还有函数变量.把函数本身赋值给变量,这个变量为函数变量. 工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件 ...

  7. C++提高部分_C++函数模板_注意事项---C++语言工作笔记082

    然后我们再来看,c++函数模板使用的时候,两个需要注意的问题 上面我们先写上,一个模板 template 可以看到这里template,我没有用typename,这个typename实际上也可以 替换 ...

  8. C语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数

    某个函数fun_1()是在lib内,没法修改的,在程序中大量的使用了该函数,现在想把原本fun_1失效(现在失效的方法是#define fun_1(..)),用另外一个函数fun_2(),可是fun_ ...

  9. C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是

    原题: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0.在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是不是 ...

最新文章

  1. jsp 出现cannot be resolved to a type问题解决办法
  2. 何恺明大神新作--UnNAS:无监督神经网络架构搜索
  3. Linux内核设计与实现读书笔记
  4. 初中信息技术说课python_第一单元 走进Python 编程世界
  5. 挑战马斯克的Neuralink,另一家神秘的「脑机接口」公司已获投资
  6. windows下解决pip安装出错问题
  7. leetcode - 898. 子数组按位或操作(使用了集合)
  8. 《游戏大师Chris Crawford谈互动叙事》一1.1 故事叙述的历史
  9. [翻译] PPDragDropBadgeView
  10. 企业级MySQL数据库备份方案:增量备份、全量备份、逻辑备份
  11. matlab exprnd函数,Matlab 用 exprnd 函数生成符合指数分布的随机数
  12. 内控堡垒机:内网安全威胁的“终结者”
  13. Smart SVN客户端使用
  14. 推荐程序员收藏的几个技术社区以及工具网站
  15. 什么是结构体【详解】
  16. 学习python-day01-13---转自Python分布式爬虫打造搜索引擎Scrapy精讲
  17. 厉害!6 岁学编程,19 岁收月薪 2 万 的 Offer | 程序人生 2020
  18. git与gerrit基础概念
  19. 局域网arp攻击_MAC与IP不得不说的故事--深入ARP工作原理
  20. Eclipse 3.6 M7(太阳神版)发布

热门文章

  1. Hadoop大数据分布式文件系统hdfs的Java操作
  2. Apache Shiro 框架简介和下载导入
  3. ajax向服务端发送请求验证用户名是否可用小示例
  4. paddlepaddle测试安装_PaddlePaddle升级解读 | 十余行代码完成迁移学习,PaddleHub实战篇...
  5. Java中外部类访问内部类的方法
  6. 汉诺塔-递归算法深入理解
  7. Java注解原来如此通俗易懂
  8. pythoncharm快捷键_Pycharm最常用的快捷键及使用技巧
  9. JQuery:实现列表展开和缩放
  10. IDE / Qt / 浅谈 qmake 之 pro、pri、prf、prl文件