C语言中被static修饰的函数或变量

static修饰的函数可认为是“局部函数”,只能被本源码文件访问。而没有static关键字的函数可认为是全局函数(可在函数前写上extern,此关键字是默认的,所以可不写),可跨文件被访问。static修饰的变量可类推,当在一个函数内部使用static修饰变量时,此变量保存的静态存储区,不因函数退出而销毁,只是只能在此函数中访问到而已。举例如下:

  • function.h文件
#pragma once

static int StaticFun( int a, int b );
int ExternFun( int a, int b );
extern int externNum;
  • function.c文件
#include "function.h"

static int staticNum = 11; //只能在本文件中使用
int externNum = 1; //本文件及外部文件均可使用

//只能在本文件中使用
static int StaticFun( int a, int b )
{
    return a + b;
}   

//函数默认是extern的,此函数在本文件中及外部文件中均可使用
int ExternFun( int a, int b )
{
    int sum = StaticFun( a, b ) + 10; //同一个文件中可以访问static声明的函数
    return sum;
}
  • main.c文件
#include <stdio.h>
#include "function.h"

int main( int argc, char** argv )
{
    int aa = 0, bb = 0;
    //aa = StaticFun( 10, 11 ); //不能访问,编译不能通过,函数是static类型的
    bb = ExternFun( 20, 20 );

    printf( "aa=%d, bb=%d\n", aa, bb );


    printf( "externNum=%d\n", externNum );
    //printf( "staticNum=%d\n", staticNum ); //不能访问,编译不能通过,是static的变量

    return 0;
}

猜你喜欢

转载自blog.csdn.net/s634772208/article/details/81145657