1

gcc 4.7.2 c89

你好,

我正在使用 Apache Portable Runtime 并查看他们的 typedef

typedef short apr_int16_t
typedef int apr_int16_t
typedef size_t apr_size_t /* This is basically the same, so what's the point */

等等

  1. 那么这一切的意义何在?
  2. 什么时候应该决定使用 C 的内置标准数据类型或 typedef 的数据类型?

我只是举了一个使用 APR 的例子。不过,我也泛泛而谈。还有 typedef 的数据类型的 stdint.h 头文件。

非常感谢您的任何建议,

4

2 回答 2

2

在我看来,最好为系统的本机数据类型自定义定义数据类型,因为它有助于清楚地区分类型的大小。

例如:long 可能是 32 位或 64 位,具体取决于运行代码的机器及其构建方式。但是,如果您的代码特别需要一个 64 位变量,那么将其命名为 uint_64_t 或类似名称总是有助于清楚地关联大小。

在这种情况下,代码可以写成:

    #if _64BIT_
    typedef long uint_64_t
    #else
    typedef long long uint_64_t
    #endif

但正如 Mehrdad 所建议的那样,不要“只是为了好玩”。:)

于 2012-11-30T05:33:28.993 回答
1

好问题。

  1. 那么这一切的意义何在?

    它旨在用于抽象,但与其他任何事物一样,它有时会被误用/过度使用。
    有时需要向后兼容(例如typedef VOID void在 Windows 中),有时需要适当的抽象(例如typedef unsigned int size_t),有时它在逻辑上完全没有意义,但使输入更容易(例如typedef char const *LPCSTR在 Windows 中)。

  2. 什么时候应该决定使用 C 的内置标准数据类型或 typedef 的数据类型?

    如果它使事情变得更容易,或者如果它实现了适当的抽象屏障,请使用它。
    这究竟意味着什么,你将不得不随着时间的推移而学习。
    但不要“只是为了好玩”!

于 2012-11-30T05:29:55.600 回答