对函数的作用
外部函数:
extern用于声明或定义外部函数
定义的函数能被本文件和其他文件访问。
不允许有同名的外部函数
extern可以省略,因为默认情况下声明和定义的函数都是外部函数
#include <stdio.h>
extern void test()
{
printf("调用了test函数\n");
}
extern void test();
int main()
{
test();
return 0;
}
内部函数:
static用于声明或定义内部函数
定义的函数只能被本文件访问
允许不同文件中有同名的内部函数
#include <stdio.h>
static void test()
{
printf("调用了test函数\n");
}
此时如果在外部文件调用test函数会报错:
Undefined symbols for architecture x86_64:
"_test", referenced from:
_main in HelloWord-a2ffb8.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
对全局变量的作用
全局变量分两种:
外部变量:能被本文件和其他文件访问
extern 声明一个外部变量
默认情况下,所有的全局变量都是外部变量
不同文件中的同名外部变量,都代表着同一个变量
#include <stdio.h>
int a;
void test()
{
printf("调用了test函数,a的值是%d\n",a);
a = 100;
}
#include <stdio.h>
int a;
void test();
int main()
{
a = 10;
test();
printf("调用完test函数后,a的值是%d\n",a);
return 0;
}
结果:
调用了test函数,a的值是10
调用完test函数后,a的值是100
内部变量:只能被本文件访问,不能被其他文件访问
static:定义一个内部变量
不同文件中的同名内部变量,互不影响
#include <stdio.h>
static int a;
void test()
{
printf("调用了test函数,a的值是%d\n",a);
a = 100;
}
#include <stdio.h>
static int a;
void test();
int main()
{
a = 10;
test();
printf("调用完test函数后,a的值是%d\n",a);
return 0;
}
结果:
调用了test函数,a的值是0
调用完test函数后,a的值是10
对局部变量的作用
延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁
并不会改变局部变量的作用域
使用场合:如果某个函数的调用频率特别高,并且函数内部的某个变量值是固定不变的,就可以使用static修饰该局部变量,可以避免多次分配内存空间
#include <stdio.h>
static int a;
void test()
{
int a = 0;
a++;
printf("a的值是%d\n",a);
static int b = 0;
b++;
printf("b的值是%d\n",b);
}
int main()
{
test();
test();
test();
return 0;
}
结果:
a的值是1
b的值是1
a的值是1
b的值是2
a的值是1
b的值是3
网友评论