【发布时间】:2014-04-02 22:37:34
【问题描述】:
以下程序在课堂上分发的练习工作表上。我们被要求提供它的输出,但根据我对链接的理解,file2.c 不应该有两个静态标识符 b 的实例,但程序编译时会发出警告并且运行良好。我的问题是,为什么允许这样做?我认为静态链接的目的是能够访问该文件中任何地方的标识符?
澄清:问题是关于 file2.c:有两个“静态 int b”声明。为什么允许?
/* file1.c */
#include <stdio.h>
extern int a;
static int b;
void f(int);
void g(void);
int main() {
a = 10;
b = 20;
f(a);
f(b);
g();
printf("main: %d %d\n", a, b);
return 0;
}
/* file2.c */
include <stdio.h>
int a;
static int b;
void f(int c) {
static int b = 5;
a += b;
b += c;
printf("f: %d %d\n", a , b ) ;
}
void g(void) {
a += 5;
b = 10;
printf("g: %d %d\n", a , b);
}
提前感谢您的帮助(这是我第一次发帖,如果有格式错误,我深表歉意!)。
【问题讨论】:
标签: c