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

<<程序设计实践>>, 有一个问题想问一下

  •  
  •   herozem · 2015-01-04 23:09:37 +08:00 · 738 次点击
    这是一个创建于 3396 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看的这一节是1.5, 主题是Magic Numbers, 大致意思是尽量不要在代码中使用含义不明的数字, 应该要给他们取个名字; define numbers as constants, not macros;

    那么问题来了:

    Exercise 1-10. How would you rewrite these definitions to minimize opotential errors?
    
    #define FT2METER 0.3048
    #define MI2FT 5280.0
    ...
    

    在C++中可以用const定义, 在Java中可以用final float定义, 在C中, enum只能用于整数,define又是不被推荐的, 那么有别的方法吗?

    ps: 1.5节中有一句话我没看懂, 不知道大家可以给我讲讲么:(白乔 注解版Page 27, 中间一段)It may not be worth inventing a name for the size of a local array, but it is definitely worth writing code that does not have to change if the size or type changes.

    6 条回复    2015-01-05 16:46:05 +08:00
    saber000
        1
    saber000  
       2015-01-05 01:54:05 +08:00
    double FT2METER = 0.3048; // 敢改切JJ
    double MI2FT = 5280.0; // 改了捅菊花
    herozem
        2
    herozem  
    OP
       2015-01-05 09:11:44 +08:00
    @saber000 不对吧, 首先,用enum和const定义常量的目的是让存储常量值的变量不能被重新肤质赋值;因为是double类型, 所以enum不可取, 后来我验证了一下, c89中是有const关键字的;-), 所以这个题应该是用const定义这些个常量
    scenix
        3
    scenix  
       2015-01-05 10:28:43 +08:00
    const
    canautumn
        4
    canautumn  
       2015-01-05 11:34:36 +08:00
    最后一句应该是说,如果只是为了给本地数组大小的数字起个名字,这么做不太值得;但是如果是考虑到当数组大小数值或类型改变时,不需要修改代码(仅需改变常量定义的值),那这么做就是值得的。
    saber000
        5
    saber000  
       2015-01-05 12:14:23 +08:00 via Android
    @herozem 我专职Python开发,Python没有const
    herozem
        6
    herozem  
    OP
       2015-01-05 16:46:05 +08:00
    @canautumn 谢谢, 应该就是这个意思 ;-)
    @saber000 嗯, python中是没有const, 但是可以hack
    @scenix 是的;-)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5425 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:13 · PVG 16:13 · LAX 01:13 · JFK 04:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.