【发布时间】:2010-11-06 00:03:12
【问题描述】:
我是 C 新手。我面前有一本书,它解释了 C 的“文件范围”,包括示例代码。但是代码只声明和初始化了一个文件范围的变量——它不会通过例如尝试以非法方式访问它来验证变量的范围。所以!本着科学的精神,我构建了一个实验。
文件bar.c:
static char fileScopedVariable[] = "asdf";
文件foo.c:
#include <stdio.h>
#include "bar.c"
main()
{
printf("%s\n", fileScopedVariable);
}
根据我的书和 Google,对 printf() 的调用应该会失败 - 但它不会。 foo.exe输出字符串“ASDF”并正常终止。我非常想使用文件范围。我错过了什么?
【问题讨论】:
-
调用使用静态“文件范围”定义的变量是用词不当。它仅限于单个翻译单元,这是递归粘贴到所有#included 文件中的结果。