转载自:
https://blog.csdn.net/cw616729/article/details/95003577
https://blog.csdn.net/keyeagle/article/details/6708077
1.含义:
定义为static的函数,作用域为本文件,它只能在定义该函数的源文件中使用。
2.好处
使用static的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
- 其他文件中可以定义相同名字的函数,不会发生冲突
- 静态函数不能被工程内其他文件所用。
3.根本原因
根本原因是C语言中同一个工程中不能有同名函数。
当程序中有很多个源文件的时候,有些源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件)所看到,这时候就可以用static修饰这些“其他的函数”。
例:file1.c中使用file2.c中定义的静态函数报错
#file1.c
#include<stdio.h>
#include "file2.h"
int main(int argc, char const *argv[])
{
staticfun();
normalfun();
return 0;
}
#file2.h
#ifndef _FILE1_H
#define _FILE1_H
static void staticfun();
void normalfun();
#endif
#file2.c
#include<stdio.h>
#include "file2.h"
static void staticfun()
{
printf("I am staticfun!\n");
}
void normalfun()
{
printf("I am normalfun!\n");
}
当然在file2.c中自己使用是没有问题的,在file2.c中加上主函数
#include<stdio.h>
#include "file2.h"
static void staticfun()
{
printf("I am staticfun!\n");
}
void normalfun()
{
printf("I am normalfun!\n");
}
int main(int argc, char const *argv[])
{
staticfun();
normalfun();
return 0;
}
静态函数的声明需不需要放到头文件中?因为它并不是提供给其他函数使用的接口。我想还是需要吧,放到头文件中,对应的自己的源文件可以用。