美文网首页
9.C语言 static和extern

9.C语言 static和extern

作者: 爱吃馒头的二饼 | 来源:发表于2019-07-12 14:15 被阅读0次

对函数的作用

外部函数:

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

相关文章

  • 9.C语言 static和extern

    对函数的作用 外部函数: extern用于声明或定义外部函数定义的函数能被本文件和其他文件访问。不允许有同名的外部...

  • static 和 extern 关键字

    static 和 extern 是c语言中的两个关键字,是用来修饰变量和函数. 1.static和extern修饰...

  • C语言static 和extern

    1. static和extern对函数的作用 外部函数:定义的函数能被本文件和其他文件访问1> 默认情况下所有函数...

  • const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern stat...

  • const、static、extern、宏

    const static extern 宏 const与宏的区别 static和const的联合使用 extern...

  • iOS const、宏、static、extern的关系

    iOS const、宏、static、extern的关系 iOS const、宏、static、extern的关系

  • extern和static

    对于extern来说是这样的是从一个类扩展到另一个类中的,例如在ViewController中声明一个变量NSSt...

  • static和Extern

    static的作用: 修饰局部变量: 只会初始化一次; 而且只有一份内存; 并不会改变局部变量的作用域,仅仅是改变...

  • 2019-03-08

    iOS const、宏、static、extern的关系 - 简书 iOS中static,const,extern...

  • static, static inline, extern, r

    static, static inline, extern, register, static const htt...

网友评论

      本文标题:9.C语言 static和extern

      本文链接:https://www.haomeiwen.com/subject/yrbekctx.html