我通过从Understanding Unix/Linux Programming (Bruce Molay)一些示例代码工作,我已经看到了一个无效UTMP类型的定义:为什么c中使用复杂的空类型?
#define NULLUT ((struct utmp *)NULL)
的方法,如用此空类型:
struct utmp *utmp_next()
{
...
if (no_more_records)
return NULLUT;
}
而客户端代码检查无效UTMP这样:
int main()
{
...
while ((utbufp = utmp_next()) != ((struct utmp *)NULL))
do_something()
}
为什么不utmp_next()只返回NULL
从这个方法去罚款stddef.h
和while循环检查呢?
实际的书源文件所在的位置:
- http://sites.harvard.edu/~lib215/reference/bookcode/code/ch02/utmplib.c
- http://sites.harvard.edu/~lib215/reference/bookcode/code/ch02/who3.c
...也许笔者自定义的'NULL'前面用'(void *)0'表示,并使用上面的转换函数使它与C++编译器一起工作... = P – Mints97 2015-04-05 08:54:32
@ Mints97:是的,有很多可能的*非常糟糕的原因。 – 2015-04-05 08:58:07
'void main()'是我的错字:(我已经更新了,我还附加了一个链接到源文件。 – 2015-04-05 09:42:57