C语言是以文件文件为单位组织的,在一个源程序的所有文件中,一个外部变量和函数只能在源程序中定义一次。由于不同文件中的不同函数和变量很多时候都会相互引用,因此出现了static和extern关键字。这里主要介绍static函数,是对今天的一个编译问题的总结。
学过C++ 应该都知道,类成员有三种类型:public,protected,private。其中private关键字表示该字段只能被该类的成员函数访问,对类外不可见。c中的static关键字和这个意思差不多:凡是加了static关键字的函数,则它只对包含该static函数的文件是可见的,在文件外是不可见的。下面举一个例子说明一下。
下面是main函数,它调用了hello函数打印字数组buf,位于文件test.c中。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{char  buf[] = "hello world!\n";hello(buf);                                                         return 0;}

hello函数位于hello.c中

#include<stdio.h>
#include<stdlib.h>static void hello(char *buf)
{     write(1,buf,sizeof buf);
}

注意,其中的hello函数包含static关键字

编译后

gcc hello.c test.c -o test

会出现下面的错误

/tmp/ccU7gZiZ.o: In function `main':
test.c:(.text+0x3f): undefined reference to `hello'
collect2: error: ld returned 1 exit status

表示找不到 hello 函数,然后我们试一下把hello函数改成非static类型的。重复上述过程就可以顺利生成目标代码运行。
所以可以看到,包含static关键字的函数只在他所在的文件中是可见的,在其他文件中不可见,会导致找不到定义。

C语言中的static函数相关推荐

  1. c语言中的static变量和static函数

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的修饰变量作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函 ...

  2. C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。

    C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加s ...

  3. c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  4. c语言中rand()的作用,c语言中的rand()函数用法

    rand() rand()函数作用:用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的. rand()函数返回:返回一个范围在 ...

  5. c语言中的printf函数_C语言中的printf()函数与示例

    c语言中的printf函数 C语言中的printf()函数 (printf() function in C) The printf() function is defined in the <s ...

  6. c语言的point函数,C语言中friend友元函数详细解析

    C语言中friend友元函数详细解析 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien ...

  7. C语言中的strstr函数

    C语言中的strstr函数 说到strstr函数,可能很多人会比较陌生,对比其他的字符串函数比如strcpy,strcmp等等,它的确比较少用,但其实他也是一个非常有用和常见的函数,今天,就让我们一起 ...

  8. C语言中的atoi函数的实现

    C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个 ...

  9. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

最新文章

  1. linux服务器lvs,Linux的企业-LVS(Linux虚拟服务器)及FULLNAT设置
  2. Oracle顶级认证OCM考试实战总结
  3. 实战能力|一文看懂GDB调试上层实现
  4. Android App图片轮播效果的组件化
  5. python代码300行程序_python小工具,15行代码秒出工资条
  6. 数据结构-队列和栈的那些事(三)
  7. java实践体会,java实践心得体会范文3篇
  8. SeetaFace6人脸库体验(全部开源)
  9. kutools for word 10(Word工具箱) 附安装教程
  10. linux kylin 终端字体,安装Nerd Fonts字体
  11. 本地组策略编辑器计算机配置,本地组策略编辑器
  12. 粒子追踪 matlab,粒子追踪软件 - 研究粒子与场的相互作用
  13. 解决NUC8豆子峡谷装黑苹果键盘错位的设置
  14. 独家百度刷权重全套代码工具教程
  15. git把一个分支上的某次提交同步到另一个分支上
  16. 阿里云与华为USG防火墙IPSEC对接
  17. 2021-08-05 得帆技术培训Linux作业
  18. 区别:αβ^T、βα^T、αα^T、(Aα)(Aα)^T、β^Tα、α^Tβ、α^Tα、(Aα)^T(Aα)
  19. 这位闯进程序员界的维密天使,她到底可以编出什么?!
  20. Git系列(四)、在IDEA操作Git本地仓库与连接远程Git仓库(推送、合并、拉取、克隆操作)

热门文章

  1. C++十种排序方法(快速排序、冒泡排序等等)
  2. 利用Apache的commons-codec依赖实现加密
  3. cmd命令以及用法大全
  4. mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
  5. csdn发表博客时出现选择文章类型”
  6. 章鱼网络进展月报 | 2022.4.1-4.30
  7. java合并单元格的快捷键_浅谈java单元格合并的实现(转载)
  8. C语言BCD码直接转int(0x12,0x34->1234)
  9. 手机快速完成PDF转Word的完美方法
  10. 基于python的人工智能的案例-廖雪峰大牛13个案例带你全面入门人工智能!