0

谁能解释一下 utsname.h(utsname 定义)中的以下表达式的语法:

extern int uname (struct utsname *__name) __THROW;

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

4

1 回答 1

2

将函数声明为 throw 意味着在使用该函数时不会抛出异常。

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

异常规格

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

float myfunction (char param) throw (int);

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

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

int myfunction (int param) throw(); // no exceptions allowed
int myfunction (int param);         // all exceptions allowed 
于 2013-09-19T13:35:29.803 回答