问一个 C 语言的问题,还没睡的同学来看看那。谢谢了

2015-06-17 00:32:15 +08:00
 zhangchioulin

我遇到了一段代码百思不得其解,请看代码是C语言的
#include <stdio.h>
int a, b = 10;

void test()
{
    a++;

    printf("a=%d ", a);


    int a = 0;
    a++;
    printf("a=%d\n", a);
}

int main()
{
    test();
    test();
    test();
    return 0;
}

这是C语言的代码,我想问为什么程序一开始a就直接成1了?不应该是10吗?
会不会是某处 a = 0了?
好奇怪啊

3721 次点击
所在节点    问与答
38 条回复
zts1993
2015-06-17 07:42:37 +08:00
@seki 别这样。
xvimer
2015-06-17 07:47:07 +08:00
有时候,局部变量和全局变量处理不好的话,编译也是可以通过的,然而,在链接的时候,链接器可以不动声色地影响程序的正确性。虽然题主的问题目前似乎和链接器关系不大,不过还是建议看看链接器方面的东西,对全局变量、局部变量什么的使用是很有好处的。
lifanxi
2015-06-17 09:05:06 +08:00
@moroumo

每个C程序员都需要一本ISO 9899,随时查阅。“全局变量”是会被保证自动初始化的,这是标准规定的,与编译器无关。

5.1.2 All objects with static storage duration shall be initialized (set to their
initial values) before program startup.
6.2.4 An object whose identifier is declared with external or internal linkage, or with the
storage-class specifier static has static storage duration.
6.7.8
If an object that has static storage duration is not initialized explicitly,
then:
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;

不过@xvimer提醒得也很有道理,参考: http://coolshell.cn/articles/10115.html
ChanneW
2015-06-17 09:06:26 +08:00
应该编译都通不过吧
joodo
2015-06-17 09:16:57 +08:00
@seki 笑尿
xdeng
2015-06-17 09:25:31 +08:00
11楼正解
zhangchioulin
2015-06-17 14:39:18 +08:00
@moroumo 默认情况下,全局变量初始值就是0
zhangchioulin
2015-06-17 14:40:04 +08:00
@weyou 懂了,又修补了我的基础,谢谢!
zhangchioulin
2015-06-17 14:42:15 +08:00
@xvimer 感谢回答,今天就会看!
zhangchioulin
2015-06-17 14:44:03 +08:00
@weyou 正解
zhangchioulin
2015-06-17 14:45:33 +08:00
@loveuqian 吐槽我。。。我想把基础学得牢靠点,我们这里的人都是专业术语。。。不学牢靠点都不知道怎么说话了
zhangchioulin
2015-06-17 14:47:01 +08:00
@ChanneW 通过了系统是 优胜美地 C的编译器是Xcode带的
mocodo
2015-06-17 16:54:59 +08:00
@zhangchioulin 有些编译器会编译不过。不过变量不初始化就使用,一般编译器都会warning的吧。
loveuqian
2015-06-17 16:59:51 +08:00
@zhangchioulin
我这10天就把c讲完了,已经开始oc啦,10天就ui啦
loveuqian
2015-06-17 17:00:19 +08:00
@zhangchioulin
我这10天就把c讲完了,已经开始oc啦,10天后就ui啦
zhangchioulin
2015-06-17 19:07:26 +08:00
@loveuqian 是我看的太慢了,一起加油!
louk78
2015-06-17 22:33:17 +08:00
a都没初始化
fulvaz
2015-06-18 04:39:59 +08:00
..............这么写代码会被打死

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

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

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

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

© 2021 V2EX