C 语言下,如何判断 int 类型数值是否 initialized

2020-04-12 19:27:34 +08:00
 8e47e42
如题,如何区分没有初始化获得的 0 和初始化以后获得的 0 ?
3096 次点击
所在节点    C
13 条回复
Mithril
2020-04-12 19:29:15 +08:00
全部变量都手动初始化就不需要判断了,这个完全看你们的 coding rule 。而且静态检查也能查得出来。
May725
2020-04-12 19:54:03 +08:00
写了这么多年代码,从来没考虑过这个问题,或者称之为需求。
我一般都习惯手动初始化变量,不依靠默认值。
也可以将 0 视为无效值,其他值为有效值,就不要考虑 0 的问题了
msg7086
2020-04-12 19:57:52 +08:00
无法区分。未初始化的变量含有任意数值。
ipwx
2020-04-12 19:58:22 +08:00
没有办法,所以你不要这么用呗。

bool is_initialized; 或者 int *value = NULL;
smdbh
2020-04-12 21:23:42 +08:00
是被谁初始化的?
liuzhiyong
2020-04-12 22:36:36 +08:00
似乎没有办法,坐等高手出招,我是想不出。
codyfeng
2020-04-13 00:14:41 +08:00
可以用 std::optional
codyfeng
2020-04-13 00:15:15 +08:00
@daimon2k 不好意思看错了是 C 语言
caskeep
2020-04-13 00:22:57 +08:00
这不可能吧……
codyfeng
2020-04-13 00:28:25 +08:00
话说楼主所述的“没有初始化获得的 0”在 C 语言是不存在的。没有初始化的 int 值是不可预知的。
delpo
2020-04-13 07:49:29 +08:00
根据 cppreference,变量未初始化属于 ub 行为,并不能保证其值为 0
jimmyv22ex
2020-04-13 10:11:36 +08:00
全局变量根据符号 map 判断是.bss 段还是.data 段,倒是可以判断出来;函数局部变量‘没有初始化获得的 0’条件不成立。
canyue7897
2020-04-13 15:24:25 +08:00
难道不是变量定义后,使用之前一定要手动初始化的嘛?

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

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

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

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

© 2021 V2EX