C 中的作用域非常困惑。我有一个变量:“int qwe”。此 var 应该在一个或多个文件中可见 - 在本例中为 f1.c,但在另一个 f2.c 中不可见。
假设我有:main.c、f1.c、f2.c、header.h
主要: 调用 f1(); 调用 f2();
标题:
#ifndef HEADER_INCLUDED
#define HEADER_INCLUDED
int qwe = 1;
void f1();
void f2();
#endif // HEADER_INCLUDED
f1.c:
#include <stdio.h>
extern int qwe;
void f1(){
printf("In f1: %d\n", qwe);
}
f2.c:
#include <stdio.h>
static int qwe = 2;
void f2(){
printf("In f2: %d\n", qwe);
}
现在这变得令人困惑。有定义和声明。我在头文件中定义了 qwe,在 f1.c 中声明了它。那是对的吗?是否应该在头文件中进行定义,而在 f1.c 中进行声明?我尝试了后一种情况,但出现错误 - “qwe 的多重定义”。当我从 f1.c 中删除 #include 指令时,它起作用了……当我删除 extern 关键字时它也起作用。 extern 是多余的吗?
f2.c 我想它没问题并且表现符合预期,是吗?但是,如果我将#include 与标题放在一起,它就会中断。这是为什么?
什么时候应该在源文件中使用#include?如果我不包含它 f1.c 或 f2.c,它就可以工作......
此外,如果我在函数内将变量定义为静态变量,如 static int i = 0;当函数存在时,这个变量不会被销毁,它会保留它的内存和数据。下次调用相同的函数时,将可以访问它,对吗?但是 var 不会重新初始化为 0,即定义的行不会执行。正确吗?
生活在践踏我:(
最佳答案
在 header 中,声明变量。在例如 f1.c
中,定义变量,例如int qwe = 1;
//在全局范围内。
在所有想要查看/更改qwe
的文件中,包括声明变量的 header 。简单易行。
关于C - 外部、静态、包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28968089/