Zee*_*shi 3 c variables static scope global-variables
//a.c
#include <stdio.h>
#include "b.c"
void main()
{
int var;
var = increment();
var = increment();
var = increment();
count = count + 3;
var = count;
printf("%d", var);
}
Run Code Online (Sandbox Code Playgroud)
//b.c
static int count;
int increment()
{
++count;
return count;
}
Run Code Online (Sandbox Code Playgroud)
现在就像在 bc 文件中一样,我有一个名为 count 的变量并且是静态的。现在这个变量不应该直接在 ac 中访问,但在我的情况下我可以访问和操作它。所以我错过了什么吗?
OUTPUT
6
Run Code Online (Sandbox Code Playgroud)
#include "b.c"ina.c是b.c编译的一部分a.c;它们被编译为一个源文件。
为了将单独的源文件中的标识符分开,您可以单独编译它们,而不使用#include将一个包含在另一个中。单独的编译生成单独的目标文件(.oUnix 和类 Unix 系统上的文件),然后您将它们与链接命令(可能包含在gcc命令中或由命令执行)链接在一起。
分离源文件也分离了您想要在两个文件之间共享的标识符,名为increment. 所以a.c不会知道 about increment,编译器会抱怨。要为单个函数处理此问题,您可以简单地在a.cwith 中声明该函数extern int increment();。但是,管理这种标识符共享的常用技术是:
b.h,该文件声明要在其中定义b.c但与其他源文件共享的标识符。b.h,声明increment用extern int increment();。b.c,包括b.h用#include "b.h"。b.c,还包括b.h。这提供了检查 中的声明是否b.h与 中的定义匹配b.c,因为编译器在编译时会同时看到b.c并报告不一致。| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |