可以解释一下utsname.h中找到的以下表达式的语法(utsname definition):
extern int uname (struct utsname *__name) __THROW;
__THROW
是一个宏,并从throw()
提供cdefs.h
。为什么它可以这样放在extern函数的定义中?
答案 0 :(得分:2)
将函数声明为throw意味着使用此函数时不会抛出任何异常。
从http://www.cplusplus.com/doc/tutorial/exceptions/
复制例外规范
当声明一个函数时,我们可以通过在函数声明中附加一个throw后缀来限制它可能直接或间接抛出的异常类型:
float myfunction (char param) throw (int);
这声明了一个名为myfunction的函数,它接受一个char类型的参数并返回一个float类型的元素。此函数可能抛出的唯一例外是int类型的异常。如果它直接或间接地抛出具有不同类型的异常,则它不能被常规的int类型处理程序捕获。
如果此throw说明符保留为空且没有类型,则表示该函数不允许抛出异常。不允许抛出说明符(常规函数)的函数抛出任何类型的异常:
int myfunction (int param) throw(); // no exceptions allowed
int myfunction (int param); // all exceptions allowed