Tag: static variables

C中的静态变量初始化

可能重复: C中静态变量的初始化 我知道全局变量或静态都是在C中自动初始化为零。但是,我不确定是否只有一个或者只有一个被初始化。 请注意,我不是在讨论函数中定义的变量,而是在.c文件中全局变量。 那么以下哪个变量会自动初始化为零? static struct mystruct var1; struct mystruct var2; static struct { int x; int y; } var3;

gcc不会警告无法访问的代码

我想知道为什么gcc(4.6.3)没有给我这个例子中无法访问的代码的警告: #include int status(void) { static int first_time = 1; if (first_time) { return 1; first_time = 0; /* never reached */ } else { return 0; } } int main(int argc, const char *argv[]) { printf(“first call %d\n”, status()); printf(“second call %d\n”, status()); return 0; } 注意,故障status()函数的目的是保持状态。 我曾期望通过-Wall得到警告。 我也试过了-Wunreachable-code , -Wextra , -pedantic和-ansi (正如这里所讨论的那样)。 […]

从一个文件访问静态变量到另一个文件

我最近遇到过如何访问一个在file1.c中声明为static的变量到另一个file2.c的问题? 是否可以访问静态变量? 我对C中静态关键字的理解是, static是“内部链接”,因此只能从一个编译单元访问它们 – 它们是定义它们的单元。 使用内部链接声明的对象是单个模块的私有对象。 正如我的一位朋友建议我解决方案。 在file1.c #include int main() { int b=foo(); printf(“%d”,b); return 0; } 在file2.c static int a=25; int foo() { return a; } 由gcc file1.c file2.c -o file编译 如果我在上面,我可以访问变量。 所以我的问题是: 上述程序是否违反静态变量规则? 如果没有,为什么会这样,除了包含文件( #include )之外,还有其他方法可以访问静态变量。 我怎么能从另一个文件访问静态变量? 在C中,如何将全局变量的范围限制为声明它的文件? 如果我对静态变量概念有误,并且有更好的解决方案可用于访问静态变量,请纠正我?