V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cley
V2EX  ›  C

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

  •  
  •   cley · 2013-06-17 09:58:40 +08:00 · 1383 次点击
    这是一个创建于 3959 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是书中的示例代码
    #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语言菜鸟求助各位大大帮我解惑。
    第 1 条附言  ·  2013-06-17 21:00:11 +08:00
    刚刚登上发现已经有那么多回复了,没有想到呢,大家的回答已经很详尽了,真是谢谢各位大大了!
    13 条回复    1970-01-01 08:00:00 +08:00
    moroumo
        1
    moroumo  
       2013-06-17 10:05:42 +08:00   ❤️ 1
    程序是按照代码的顺序由上到下执行的。
    既然你调换了顺序,当然结果就是不同的了。
    xunyu
        2
    xunyu  
       2013-06-17 10:12:26 +08:00   ❤️ 1
    fathoms 没赋值的话是随机数,
    LokiSharp
        3
    LokiSharp  
       2013-06-17 10:13:22 +08:00   ❤️ 1
    对调一下的话,因为 fathoms 在使用前没有初始化,你能得到的只有一串没有意义的随机数
    ETiV
        4
    ETiV  
       2013-06-17 13:23:51 +08:00   ❤️ 1
    int feet, fathoms;

    feet = 6 * fathoms;
    fathoms = 2;

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

    C语言最好在声明变量时 清零 或 赋值 !!!我有过血淋淋的教训
    bengol
        7
    bengol  
       2013-06-17 14:45:17 +08:00   ❤️ 1
    http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2a.html
    details on function call, including how the local variables are initialized.
    LokiSharp
        8
    LokiSharp  
       2013-06-17 14:57:15 +08:00   ❤️ 1
    @xdeng 专业一点,叫做初始化23333
    detailyang
        9
    detailyang  
       2013-06-17 17:24:57 +08:00   ❤️ 1
    我习惯声明 变量时初始化...即便是0
    jedyu
        10
    jedyu  
       2013-06-17 17:31:45 +08:00   ❤️ 1
    楼主骗分
    cley
        11
    cley  
    OP
       2013-06-17 21:04:16 +08:00
    @ETiV 还在慢慢摸索中,环境什么的还不太懂,我是在linux系统中,在终端用vi和gcc操作的。
    clowwindy
        12
    clowwindy  
       2013-06-17 21:42:10 +08:00   ❤️ 1
    $ 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
        13
    cley  
    OP
       2013-06-17 22:01:13 +08:00
    @clowwindy 受用了,我需要慢慢熟悉一下一些有用的命令选项才行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2582 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:25 · PVG 23:25 · LAX 08:25 · JFK 11:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.