带有 throw() 的外部声明

extern declaration with throw()

本文关键字:外部 声明 throw 带有      更新时间:2023-10-16

可以解释一下utsname.h(utsname定义)中以下表达式的语法吗?

extern int uname (struct utsname *__name) __THROW;

__THROW是一个宏,从cdefs.h中给出throw()。为什么它可以这样放在 extern 函数的定义中?

函数声明为 throw 意味着使用此函数时不会引发异常。

从 http://www.cplusplus.com/doc/tutorial/exceptions/复制

异常规范

在声明函数时,我们可以通过在函数声明中附加一个抛出后缀来限制它可能直接或间接抛出的异常类型:

float myfunction (char param) throw (int);

这声明了一个名为 myfunction 的函数,该函数接受一个 char 类型的参数并返回一个 float 类型的元素。此函数可能引发的唯一异常是 int 类型的异常。如果它直接或间接抛出具有不同类型的异常,则常规 int 类型处理程序无法捕获它。

如果此抛出说明符留空且没有类型,则意味着不允许该函数引发异常。没有抛出说明符的函数(常规函数)允许抛出任何类型的异常:

int myfunction (int param) throw(); // no exceptions allowed
int myfunction (int param);         // all exceptions allowed