【问题标题】:In the C API for a new scientific library, should I use size_t, unsigned long long, or uint_64t?在新科学库的 C API 中,我应该使用 size_t、unsigned long long 还是 uint_64t?
【发布时间】:2022-12-15 01:04:28
【问题描述】:

我正在开发一个用于读取 GRIB2 文件的新 API - 这是气象学家和气候科学家开源库的一部分。

该库需要处理 64 位整数(以及 8、16 和 32 位整数)。必须处理有符号和无符号整数类型。

在netcdf-c库中,我们使用unsigned long long:

int
nc_put_att_ulonglong(int ncid, int varid, const char *name, nc_type xtype,
                     size_t len, const unsigned long long *op);

但我们有时也会使用 size_t:

int
nc_inq_grpname_full(int ncid, size_t *lenp, char *full_name);

尽管我写了那个函数,但我不记得为什么选择 size_t 而不是 unsigned long long。 ;-)

在编写通用库时,是否有充分的理由更喜欢 size_t 而不是 unsigned long long?

现在我正在编写一个新的 API,我应该使用 uint64_t 类型吗?它似乎最适合表示数据文件中实际为 64 位的内容。

【问题讨论】:

    标签: netcdf netcdf4 grib pygrib


    【解决方案1】:

    我更喜欢size_t而不是unsigned long long,因为size_t更紧凑,而unsigned long long也有点混乱。我更喜欢uint64_t而不是size_t,因为uint64_t更精确。

    sizeof(bool) = 1
    sizeof(char) = 1
    sizeof(double) = 8
    sizeof(float) = 4
    sizeof(int) = 4
    sizeof(long double) = 8
    sizeof(long long) = 8
    sizeof(long) = 8
    sizeof(short) = 2
    sizeof(size_t) = 8
    

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2011-08-06
      • 2022-12-20
      • 1970-01-01
      • 2012-09-10
      相关资源
      最近更新 更多