4.3结论 一个全局变量被static修饰,使得这个全局变量只能在本源文件中使用,不能在其他源文件中使用。本质原因是全局变量默认是有外部链接属性的,在外部文件中要想使用,只要适当声明就可以使用,但是全局变量被static修饰之后,外部链接属性变成了内部链接属性了,只能在自己所在的源文件内部使用了,其他源文件,即使声明了,也...
不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域。这篇小文介绍2个比较重要的关键字: static和extern。static和extern不仅可以用在变量上,还可以用在函数上。这讲先介绍它们对函数的作用。 一、e…
当一个内联函数同时也是static函数时,如果编译器决定不内联这个函数,那么在当前的编译单元里,就会创建一个仅供当前编译单元使用的函数实现,所有当前编译单元的函数调用,都会指向这个实现。其它编译单元看不见这个实现。就像一个static函数一样。 也就是说,static inline和extern inline的区别就是,当编译器决定不内联这个...
static int b = 0; // 定义一个static类型的全局变量b,初始值为0 void func(){static int c = 0; // 定义一个static类型的局部变量c,初始值为0 printf("b = %d, c = %d\n", b, c); // 打印b和c的值 b++; // b的值加1 c++; // c的值加1 }int main(){func(); // 调用func...
所以static inline 的用法就能很好的解决这个问题,使用static修饰符,函数仅在文件内部可见,不会污染命名空间。可以理解为一个inline在不同的.C里面生成了不同的实例,而且名字是完全相同的。 内联函数有些类似于宏。内联函数的代码会被直接嵌入在它被调用的地方,调用几次就嵌入几次,没有使用call指令。这样省去了函...
static:⼀、在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。1、定义全局静态变量:在全局变量前⾯加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。a.在全局区分配内存。b.如果没有初始化,其默认值为0.c.该变量在本⽂件内从定义开始到⽂件结束可见。2、定义...
C语言是一种通用编程语言,广泛应用于系统软件、嵌入式系统等领域。在C语言中,extern、static、struct、enum、union和volatile等关键字具有特定的作用和用途。理解这些关键字的工作原理和应用场景,对于编写高效、可维护的代码至关重要。一、extern关键字extern关键字用于声明一个变量或函数,其定义在别的文件中。当你想在...
static也可以用来声明一个内部函数 2.extern 在定义函数时,如果在函数的最左边加上关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。 在一个文件中要调用其他文件中的外部函数,则需要在当前文件中用extern声明该外部函数,然后就可以使用,这里的extern也...
在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。(1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序...
我们一般定义的全局变量,如果前面没有加入static关键字,那么这个全局变量的连接属性就是external的,请注意在定义全局变量时请在源文件中定义,也就是在.c文件总定义,声明时在头文件中进行声明。 虽然我们可以在头文件(.h文件)中定义全局变量,但是这样会引入一些不好的bug。具体会引入什么错误,我们下面会详细讲。