《Posix多线程编程源代码分析》一书深入探讨了基于POSIX标准的多线程程序设计原理与实践,通过剖析源码帮助读者理解并发编程中的关键概念和技术。
Posix多线程程序设计书中实例源码的头文件errors.h如下:
```c
#ifndef __errors_h
#define __errors_h
#include
#include
#include
#include
#include
/* 定义一个宏,用于从示例中输出诊断信息。当编译时使用-DDEBUG选项时,该宏将调用printf函数并传入指定的参数列表;如果不定义DEBUG,则该宏为空。
注意:围绕err_abort和errno_abort宏的do {...} while (0);结构允许这些宏在需要语句结尾分号的地方像函数一样使用。例如,在下面的情况下:
if (status != 0)
err_abort(status, message);
else
return status;
如果err_abort是一个以“}”结束的宏,那么上面这段代码将无法编译成功,因为C语言不允许在}之后直接跟一个分号。然而,由于do...while结构需要语句结尾分号,因此可以像调用函数一样使用err_abort和errno_abort。
*/
#define err_abort(code,text) do { \
fprintf (stderr, %s at \%s\:%d: %s\n, \
text, __FILE__, __LINE__, strerror (code)); \
abort (); \
} while (0)
#define errno_abort(text) do { \
fprintf (stderr, %s at \%s\:%d: %s\n, \
text, __FILE__, __LINE__, strerror(errno)); \
abort (); \
} while (0)
#endif
```