【发布时间】:2017-05-03 15:24:04
【问题描述】:
好吧,这是一个愚蠢的问题,因为我已经用 C 编码了一段时间,但我从来没有真正弄清楚。
C 库喜欢实现自己的晦涩数据类型,这些数据类型通常似乎只是对现有类型的重新实现(提示此问题的库是 http://man7.org/linux/man-pages/man2/gettimeofday.2.html)。
我的问题是:您到底应该如何弄清楚这些一次性数据类型实际上是什么?它们似乎从未在手册页中的任何地方定义,因此没有深入研究头文件的源代码,我不知所措。例如,从上面提到的手册页中,什么是“suseconds_t”,在一般情况下,我如何弄清楚它的详细信息?
【问题讨论】:
-
一般文档不能指定特定于实现的内容。您知道
sys/time.h包含结构:从那里开始您应该找到类型的定义。或者您的特定平台/sdk 的文档应该深入描述类型。 -
您可以use search。从搜索结果中我选择了sys_types header which defines
suseconds_t。 -
既然你知道它在
sys/time.h,你可以这样做:echo '#include <sys/time.h>' >/tmp/chocofoo.c && c99 -E /tmp/chocofoo.c | egrep '[[:blank:]]+tv_usec' ; rm /tmp/chocofoo.c;它在某些平台上也可能有所不同,具体取决于您是在 32 位还是 64 位模式下编译(甚至是 x86_64 Linux 平台上的 X32)。无论如何,我的 POSIX 手册页声明“time_t和suseconds_t类型将按照<sys/types.h>中的描述进行定义。该标头的 POSIX 手册页链接在 user694733 之前的评论中。 -
通常。 grepping 出现了定义。
-
O/T:如果你真的想发疯,看看Windows data types。它的结构很好,但正是这种僵化的结构加上针对特定用例的特定类型让我抓狂。很容易理解为什么 WinForms、WPF 或任何新事物在 Windows 上变得比 Windows API 本身更受欢迎。我很感激 POSIX 相比之下需要这么少的数据类型!
标签: c