C语言中的static函数
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函数相关推荐
- c语言中的static变量和static函数
在C语言中,static的字面意思很容易把我们导入歧途,其实它的修饰变量作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函 ...
- C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。
C/C++中Static的作用详述 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加s ...
- c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的
main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...
- c语言中rand()的作用,c语言中的rand()函数用法
rand() rand()函数作用:用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的. rand()函数返回:返回一个范围在 ...
- c语言中的printf函数_C语言中的printf()函数与示例
c语言中的printf函数 C语言中的printf()函数 (printf() function in C) The printf() function is defined in the <s ...
- c语言的point函数,C语言中friend友元函数详细解析
C语言中friend友元函数详细解析 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien ...
- C语言中的strstr函数
C语言中的strstr函数 说到strstr函数,可能很多人会比较陌生,对比其他的字符串函数比如strcpy,strcmp等等,它的确比较少用,但其实他也是一个非常有用和常见的函数,今天,就让我们一起 ...
- C语言中的atoi函数的实现
C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个 ...
- main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...
PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...
最新文章
- linux服务器lvs,Linux的企业-LVS(Linux虚拟服务器)及FULLNAT设置
- Oracle顶级认证OCM考试实战总结
- 实战能力|一文看懂GDB调试上层实现
- Android App图片轮播效果的组件化
- python代码300行程序_python小工具,15行代码秒出工资条
- 数据结构-队列和栈的那些事(三)
- java实践体会,java实践心得体会范文3篇
- SeetaFace6人脸库体验(全部开源)
- kutools for word 10(Word工具箱) 附安装教程
- linux kylin 终端字体,安装Nerd Fonts字体
- 本地组策略编辑器计算机配置,本地组策略编辑器
- 粒子追踪 matlab,粒子追踪软件 - 研究粒子与场的相互作用
- 解决NUC8豆子峡谷装黑苹果键盘错位的设置
- 独家百度刷权重全套代码工具教程
- git把一个分支上的某次提交同步到另一个分支上
- 阿里云与华为USG防火墙IPSEC对接
- 2021-08-05 得帆技术培训Linux作业
- 区别:αβ^T、βα^T、αα^T、(Aα)(Aα)^T、β^Tα、α^Tβ、α^Tα、(Aα)^T(Aα)
- 这位闯进程序员界的维密天使,她到底可以编出什么?!
- Git系列(四)、在IDEA操作Git本地仓库与连接远程Git仓库(推送、合并、拉取、克隆操作)
热门文章
- C++十种排序方法(快速排序、冒泡排序等等)
- 利用Apache的commons-codec依赖实现加密
- cmd命令以及用法大全
- mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
- csdn发表博客时出现选择文章类型”
- 章鱼网络进展月报 | 2022.4.1-4.30
- java合并单元格的快捷键_浅谈java单元格合并的实现(转载)
- C语言BCD码直接转int(0x12,0x34->1234)
- 手机快速完成PDF转Word的完美方法
- 基于python的人工智能的案例-廖雪峰大牛13个案例带你全面入门人工智能!