我正在阅读一本关于linux编程的书,并且在一个用于错误处理的头文件中,他们用一个宏来停止' gcc -Wall'从抱怨控制到无效功能的结束。我不完全理解它是如何工作的。
#ifdef __GNUC__
/* macro stops 'gcc -Wall' complaining that 'control reaches
end of non void function' if we use following functs to
terminate main() or some other non-void funct */
#define NORETURN __attribute__ ((__noreturn__))
#else
#define NORETURN
#endif
void errExit(const char *format, ...) NORETURN;
void err_exit(const char *format, ...) NORETURN;
void errExitEN(int errnum, const char *format, ...) NORETURN;
...
#endif
我想确切知道它在做什么,以及如何做。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
当您使用gcc
时,
void errExit(const char *format, ...) NORETURN;
被翻译为
void errExit(const char *format, ...) __attribute__ ((__noreturn__));
由预处理器。 __noreturn__
属性要做什么?
一些标准库函数(例如
abort
和exit
)无法返回。 GCC自动了解这一点。有些程序定义了自己永不返回的功能。你可以声明它们noreturn告诉编译器这个事实。
您在http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Function-Attributes.html了解__noreturn__
以及gcc
支持的其他功能属性的更多信息。
使用其他编译器时,同一行将转换为:
void errExit(const char *format, ...);