zoukankan      html  css  js  c++  java
  • size_t

    size_t
    (2012-10-10 19:12:39)
    转载▼
    标签:
    杂谈
       
       今天我来讲讲size_t,借此来说明我的一些代码风格。
       我们都知道size_t这个是为移植性服务的,32位系统是32位无符号整形,64位系统是64位无符号整形。比如我举个例子
       A:
       size_t add_32_t(unsigned int op1, unsigned int op2)
       {
                return op1 + op2;
       }
       B:
       uint64_t add_32_t(uint32_t op1, uint32_t op2)
       {
                return op1 + op2;
       }
       再比如一个数据结构
       A:
       struct XXX  //这个XXX可以看作是一个可变长度的块的块头
       {
            char name[NAME_SIZE];
            size_t record_cnt   //record_cnt记录了record数组的大小
            YYY record[0]
       }
       B:
       struct XXX  //这个XXX可以看作是一个可变长度的块的块头
       {
            char name[NAME_SIZE];
            uint32_t record_cnt   //record_cnt记录了record数组的大小
            YYY record[0]
       }
        哪一种代码好呢?我喜欢带数字的整形类型的(stdint.h)中定义的,因为这个不用思考,我在编码的时候看到的是uint32_t,那么写这个代码的当事人就考虑了全部可能的溢出,size等问题。如果是size_t,那么这个头部的大小是不确定的(在不同系统中),而且溢出的情况也是不确定的。
      
        大家可以用facebook开源的folly代码,grep size_t *.h *.cpp 在grep一下 uint32_t 和 uint64_t就能体会出区别。

        有的人一天写30行代码,有的人一天写300行代码,如果你写得多,一定用一些简单,可靠的方法来保证尽可能的少犯错误,不要为什麽移植性来考虑,这个都是库函数程序员考虑的问题,我编码这么多年,要说遇到代码有移植性的这个需求的,也非常罕见,有几个人会把32位下的代码移植到64位上来,或者64位的移植到32位上,起码,我绝少遇到。
        最后在举个例子
        比如我在64位程序下写了这么个函数
        bool XXX(uint32_t xxx,uint32_t yyy){}
        那么这个函数移植到32位系统,其工作的结果也是你可以预期的,和64位一样
        但如果
        bool XXX(size_t xxx, size_t yyy){}
        这个函数移植到32位系统,运行结果也是可以预期的嘛?
        所以,同志们,我建议用确定的东西,不要用不确定的东西。不过你们也要独立思考,不要被我忽悠,我只是分享我的一些经验,也许是错误的,不合适的,但这个确实是合适我的,起码我放心。

  • 相关阅读:
    【基础算法】- 全排列
    【基础算法】- 2分查找
    区块链培训
    Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
    test
    No data is deployed on the contract address!
    "throw" is deprecated in favour of "revert()", "require()" and "assert()".
    Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
    京都行
    Failed to write genesis block: database already contains an incompatible
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/2907709.html
Copyright © 2011-2022 走看看