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

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

  •  
  •   8e47e42 · 2020-04-12 19:27:34 +08:00 · 3115 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,如何区分没有初始化获得的 0 和初始化以后获得的 0 ?
    13 条回复    2020-04-13 15:24:25 +08:00
    Mithril
        1
    Mithril  
       2020-04-12 19:29:15 +08:00   ❤️ 1
    全部变量都手动初始化就不需要判断了,这个完全看你们的 coding rule 。而且静态检查也能查得出来。
    May725
        2
    May725  
       2020-04-12 19:54:03 +08:00
    写了这么多年代码,从来没考虑过这个问题,或者称之为需求。
    我一般都习惯手动初始化变量,不依靠默认值。
    也可以将 0 视为无效值,其他值为有效值,就不要考虑 0 的问题了
    msg7086
        3
    msg7086  
       2020-04-12 19:57:52 +08:00 via Android   ❤️ 1
    无法区分。未初始化的变量含有任意数值。
    ipwx
        4
    ipwx  
       2020-04-12 19:58:22 +08:00
    没有办法,所以你不要这么用呗。

    bool is_initialized; 或者 int *value = NULL;
    smdbh
        5
    smdbh  
       2020-04-12 21:23:42 +08:00
    是被谁初始化的?
    liuzhiyong
        6
    liuzhiyong  
       2020-04-12 22:36:36 +08:00
    似乎没有办法,坐等高手出招,我是想不出。
    codyfeng
        7
    codyfeng  
       2020-04-13 00:14:41 +08:00
    可以用 std::optional
    codyfeng
        8
    codyfeng  
       2020-04-13 00:15:15 +08:00
    @daimon2k 不好意思看错了是 C 语言
    caskeep
        9
    caskeep  
       2020-04-13 00:22:57 +08:00 via iPhone
    这不可能吧……
    codyfeng
        10
    codyfeng  
       2020-04-13 00:28:25 +08:00   ❤️ 1
    话说楼主所述的“没有初始化获得的 0”在 C 语言是不存在的。没有初始化的 int 值是不可预知的。
    delpo
        11
    delpo  
       2020-04-13 07:49:29 +08:00 via Android
    根据 cppreference,变量未初始化属于 ub 行为,并不能保证其值为 0
    jimmyv22ex
        12
    jimmyv22ex  
       2020-04-13 10:11:36 +08:00
    全局变量根据符号 map 判断是.bss 段还是.data 段,倒是可以判断出来;函数局部变量‘没有初始化获得的 0’条件不成立。
    canyue7897
        13
    canyue7897  
       2020-04-13 15:24:25 +08:00
    难道不是变量定义后,使用之前一定要手动初始化的嘛?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2621 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:43 · PVG 18:43 · LAX 02:43 · JFK 05:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.