博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中的static函数
阅读量:4167 次
发布时间:2019-05-26

本文共 1057 字,大约阅读时间需要 3 分钟。

        C语言是以文件文件为单位组织的,在一个源程序的所有文件中,一个外部变量和函数只能在源程序中定义一次。由于不同文件中的不同函数和变量很多时候都会相互引用,因此出现了static和extern关键字。这里主要介绍static函数,是对今天的一个编译问题的总结。

学过C++ 应该都知道,类成员有三种类型:public,protected,private。其中private关键字表示该字段只能被该类的成员函数访问,对类外不可见。c中的static关键字和这个意思差不多:凡是加了static关键字的函数,则它只对包含该static函数的文件是可见的,在文件外是不可见的。下面举一个例子说明一下

      下面是main函数,它调用了hello函数打印字数组buf,位于文件test.c中。

#include
#include
#include
int main(){ char buf[] = "hello world!\n"; hello(buf); return 0; }
        
hello函数位于hello.c中
#include
#include
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关键字的函数只在他所在的文件中是可见的,在其他文件中不可见,会导致找不到定义

转载地址:http://viqxi.baihongyu.com/

你可能感兴趣的文章
Android进阶系列-发布项目到Jcenter
查看>>
基于Zxing的二维码扫描解析库——ZxingPlus
查看>>
算法入门-程序设计入门
查看>>
java数据结构-数据结构的概述
查看>>
java -Math常用方法
查看>>
Android进阶系列-手写数据库框架
查看>>
算法入门-循环结构程序设计
查看>>
算法入门-数组和字符串
查看>>
Android进阶系列-手写高并发网络访问框架
查看>>
Java基础之线程安全基本数据类型
查看>>
Android进阶系列-手写高并发图片加载框架
查看>>
Android基础系列-大纲汇总
查看>>
Android测试系列(一)-Monkey
查看>>
Android动画系列(一) - 基础动画ViewAnimation
查看>>
C++程序员技术需求规划(发展方向)
查看>>
TinyXml2解析xml用法例子
查看>>
Linux 虚拟内存和物理内存
查看>>
产品和技术,你选对了吗?
查看>>
哈希表(Hash Table)-哈希概述
查看>>
Filebench的安装及使用
查看>>