我们可以在头文件中包含静态变量吗?如果可以,其他文件可以访问它吗?我们可以在头文件中包含静态函数并在其他文件中使用它吗?我们可以传递静态变量作为函数参数吗?假设头文件header.h中有一些函数:fun(静态整数a,静态整数B)
lx0bsm1f1#
任何在全局命名空间中声明的带有说明符static的名称都有内部链接,这意味着该名称在声明它的翻译单元中可见。因此,如果一个带有静态关键字名称声明的头包含在多个翻译单元中,那么每个翻译单元都将拥有自己的变量。
static
3okqufwl2#
您可以在头文件中声明静态变量,但此变量作用域将仅是包含此头文件的 *.c文件。
0qx6xfy63#
在头文件中使用静态变量是不正确的编码做法。此外,静态变量将变量的范围限制为一个文件。因此,无法从file2.c访问file1.c的静态变量
9o685dep4#
1.静态变量可以在头文件中定义。但是这样做的结果是在每个包含头文件的源文件中有一个该变量的私有副本。所以最好不要在头文件中声明静态变量,除非你正在处理不同的情况。1.同样适用于静态函数。1.尝试将static应用于函数参数没有多大意义,所以标准不允许这样做**(§ 6.7.5.3/2:“参数声明中唯一应出现的存储类说明符是register。”)尝试将静态变量作为参数类型输入会导致错误。
4条答案
按热度按时间lx0bsm1f1#
任何在全局命名空间中声明的带有说明符
static
的名称都有内部链接,这意味着该名称在声明它的翻译单元中可见。因此,如果一个带有静态关键字名称声明的头包含在多个翻译单元中,那么每个翻译单元都将拥有自己的变量。
3okqufwl2#
您可以在头文件中声明静态变量,但此变量作用域将仅是包含此头文件的 *.c文件。
0qx6xfy63#
在头文件中使用静态变量是不正确的编码做法。此外,静态变量将变量的范围限制为一个文件。因此,无法从file2.c访问file1.c的静态变量
9o685dep4#
1.静态变量可以在头文件中定义。但是这样做的结果是在每个包含头文件的源文件中有一个该变量的私有副本。所以最好不要在头文件中声明静态变量,除非你正在处理不同的情况。
1.同样适用于静态函数。
1.尝试将static应用于函数参数没有多大意义,所以标准不允许这样做**(§ 6.7.5.3/2:“参数声明中唯一应出现的存储类说明符是register。”)尝试将静态变量作为参数类型输入会导致错误。