当前位置:首页 > 学习资源 > 讲师博文 > static修饰的函数和普通函数有什么区别

static修饰的函数和普通函数有什么区别 时间:2024-05-11      来源:华清远见

在编程语言中,有很多地方会用到static修饰的函数,那么static修饰的函数和普通函数有哪些区别呢,这里就一下几个方对其进行分析:

作用域:

Static 修饰的函数:仅限定在本源码文件中,不能被本源码文件以外的代码文件调用。因为此特性所以不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系

普通函数:普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数,在调用前需要引用头文件或者在使用的文件中进行extern外部声明

生命周期:

Static 修饰的函数:生命周期和程序整个运行时间相同,直到退出应用程序,这样避免了调用函数时压栈出栈,速度会快很多

普通函数:生命周期仅限于该函数被调用的时段

编译方式

Static 修饰的函数:在编译时会被编译器标记为本地函数

普通函数:在编译时不会被标记

内存分配:

Static 修饰的函数:static函数在内存中只有一份,分配内存空间仅一次,且在程序运行期间一直存在,调用时并不会重新分配内存空间。

普通函数:普通函数调用时从堆栈中动态分配内存空间,函数运行结束后返回时空间被释放

以下是一段简单的程序,用于演示静态函数和非静态函数的区别:

#include <stdio.h> 

 void non_static_func() { 

    int num = 0; 

    printf("non_static_func num: %d\n", num); 

    num++; 

 static void static_func() { 

    static int num = 0; 

    printf("static_func num: %d\n", num); 

    num++; 

 int main() { 

    int i; 

    for (i = 0; i < 3; i++) { 

        non_static_func(); 

        static_func(); 

    } 

    return 0; 

通过运行程序,我们可以看到以下结果:

non_static_func num: 0 

static_func num: 0 

non_static_func num: 0 

static_func num: 1 

non_static_func num: 0 

static_func num: 2 

 我们可以看出,non_static_func函数每次被调用时,变量num的值始终为0,并没有被保留下来。而static_func函数每次被调用时,变量num的值可以被保留下来,并在下次调用时继续使用。这是因为static_func函数中的变量num是静态变量,其生命周期保持到程序结束,而non_static_func函数中的变量num是一个普通的自动变量,其生命周期仅限于函数调用过程中。

因此,我们可以看出,静态函数中的静态变量可以在多次函数调用之间保持变量值不变,而非静态函数中的变量则不会保留之前的值。这是静态函数与非静态函数的一个主要区别。

 

上一篇:机器学习的基本概念、五大流派与九种算法

下一篇:static全局变量和普通全局变量的区别

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部