gpt4 book ai didi

c - 文件范围内的 C 静态变量是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:59 25 4
gpt4 key购买 nike

我有三个文件来演示在文件范围内使用 static 变量。变量在file2.h中声明为extern,在file2.c中初始化。我在 main.c 中声明另一个与 static 同名的变量来测试静态全局范围。但我收到错误消息“main.c|6|error:‘var1’的静态声明遵循非静态声明。

有人可以向我解释 static 对文件范围的用法吗?

如果我不在 main.c 中包含 file2.h,我不会遇到任何问题。但是,如果我需要使用 main.c 中其他文件的某些函数,但仍希望将变量范围仅保留到该文件中怎么办?

ma​​in.c

#include <stdio.h>
#include "file2.h"


static int var1;

int main()
{
printf("value of staticVar1 = %d\n",var1);
func1();
printf("value of staticVar1 after function call= %d\n",var1);
return 0;
}

file2.h

#ifndef _FILE2_H
#define _FILE2_H
#include <stdio.h>

extern int var1;

int func1(void);

#endif // _FILE2_H

file2.c

#include <stdio.h>
#include "file2.h"

int var1=3;

int func1(void)
{
printf("value of staticVar1 inside the function = %d\n",var1);
return(0);
}

最佳答案

在文件范围内声明的对象具有外部或内部链接,它不能同时具有两种链接:

extern int var1;  // declare var1 an int with external linkage
int var1 = 3; // declare and define var1 with external linkage
static int var1; // declare and define var1 an int with internal linkage
// -> ERROR var1 is redeclared with different linkage

如果您希望对象的可见性仅限于声明它的源文件,则可以使用 static 说明符。

关于c - 文件范围内的 C 静态变量是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33034503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com