在看C Program Plus时,对一个示例程序有些疑问,求解惑

2013-06-17 09:58:40 +08:00
 cley
这是书中的示例代码
#include <stdio.h>
int main(void)
{
int feet, fathoms;

fathoms = 2;
feet = 6 * fathoms;
printf("There are %d feet in %d fathoms!\n", feet, fathoms);
printf("Yes, I said %d feet!\n", 6 * fathoms);

return 0;
}

我尝试把
fathoms = 2;
feet = 6 * fathoms;
这两个语句的顺序调换一下,然后编译运行得到的是不同的内容,顺序不同
出现不同结果的原因是?C语言菜鸟求助各位大大帮我解惑。
1579 次点击
所在节点    C
13 条回复
moroumo
2013-06-17 10:05:42 +08:00
程序是按照代码的顺序由上到下执行的。
既然你调换了顺序,当然结果就是不同的了。
xunyu
2013-06-17 10:12:26 +08:00
fathoms 没赋值的话是随机数,
LokiSharp
2013-06-17 10:13:22 +08:00
对调一下的话,因为 fathoms 在使用前没有初始化,你能得到的只有一串没有意义的随机数
ETiV
2013-06-17 13:23:51 +08:00
int feet, fathoms;

feet = 6 * fathoms;
fathoms = 2;

如果编译的时候没报warning, 建议你换一个C的环境.
Golevka
2013-06-17 13:27:44 +08:00
教练我想要隔壁ML家的val-binding =v=
xdeng
2013-06-17 14:36:42 +08:00
@xunyu 这同学非常棒~~~

C语言最好在声明变量时 清零 或 赋值 !!!我有过血淋淋的教训
bengol
2013-06-17 14:45:17 +08:00
http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2a.html
details on function call, including how the local variables are initialized.
LokiSharp
2013-06-17 14:57:15 +08:00
@xdeng 专业一点,叫做初始化23333
detailyang
2013-06-17 17:24:57 +08:00
我习惯声明 变量时初始化...即便是0
jedyu
2013-06-17 17:31:45 +08:00
楼主骗分
cley
2013-06-17 21:04:16 +08:00
@ETiV 还在慢慢摸索中,环境什么的还不太懂,我是在linux系统中,在终端用vi和gcc操作的。
clowwindy
2013-06-17 21:42:10 +08:00
$ gcc -Wall main.c
main.c: 在函数‘main’中:
main.c:7:8: 警告:此函数中的‘fathoms’在使用前未初始化

$ clang -Wall main.c
main.c:7:14: warning: variable 'fathoms' is uninitialized when used here [-Wuninitialized]
feet = 6 * fathoms;
^~~~~~~
main.c:4:14: note: initialize the variable 'fathoms' to silence this warning
int fathoms;
^
= 0
1 warning generated.

$ clang --analyze main.c
main.c:7:12: warning: The right operand of '*' is a garbage value
feet = 6 * fathoms;
^ ~~~~~~~
1 warning generated.
cley
2013-06-17 22:01:13 +08:00
@clowwindy 受用了,我需要慢慢熟悉一下一些有用的命令选项才行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/72603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX