请教各位可以把这几个问题解释清楚么?谢谢

jbliuhit 2005-11-30 10:25:37
1.
//a.c
int x;
int y;

void main()
{
f();
printf("%x %x\n", x, y);
}

//b.c
double x;

void f()
{
x = -0.0;
}

2.
//a.c
int x = 1;
int y;

void main()
{
f();
printf("%x %x\n", x, y);
}

//b.c
double x;

void f()
{
x = -0.0;
}

3.
//a.c
int x;
int y = 1;

void main()
{
f();
printf("%x %x\n", x, y);
}

//b.c
double x;

void f()
{
x = -0.0;
}

4.
//a.c
int x = 1;
int y = 1;

void main()
{
f();
printf("%x %x\n", x, y);
}

//b.c
double x;

void f()
{
x = -0.0;
}

5.
//a.c
int x = 1;
int y = 1;

void main()
{
f();
printf("%x %x\n", x, y);
}

//b.c
double x;

void f()
{
x = -0;
}
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csucdl 2005-12-06
  • 打赏
  • 举报
回复
应该是linkage的问题, 对于全局变量,不同文件作用域内的同名标志符可以访问同一个变量或函数, 前提是这个变量或函数是外部的,对于加了static 修饰的变量或函数则是internal linkage 即不能被其他文件作用域(file-scope)引用(reference)
假如楼住将a.c 和 b.c 这两个转换单元 translation unit 放在同一个工程下编译, 链接
这几种情况下编译通不过, 因为在文件域a.c中找不到函数fun的声明, 所以先要声明
extern void fun();
然后就是如果改过后, 打印出来的还是a.c中的x, y
csucdl 2005-12-06
  • 打赏
  • 举报
回复
问题不明确
jbliuhit 2005-12-06
  • 打赏
  • 举报
回复
up
tyj_3 2005-11-30
  • 打赏
  • 举报
回复
作用域问题

int x=8;
int y = 1;

void f();

void main()
{
f();
printf("%d \n%d\n", x, y);
}

int x=3; //VC++下编译器不准初始化,不知为什么.高手解释下
void f()
{
printf("%d\n", x);
}
jbliuhit 2005-11-30
  • 打赏
  • 举报
回复
sorry¬

是想问下这些问题怎么解释,差别的来源及内部机制,谢谢~
Mybox 2005-11-30
  • 打赏
  • 举报
回复
问题是什么???
megaboy 2005-11-30
  • 打赏
  • 举报
回复
晕,你的疑问是什么?写都没写,这么懒。
PMsg 2005-11-30
  • 打赏
  • 举报
回复
全都是类型转换得问题啊

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧