宏__THROW

在Linux/FreeBSD内核中,宏`__THROW`用于帮助GCC编译器优化C++函数调用。当启用C++且GCC版本满足条件时,`__THROW`会指示函数不抛出异常,从而避免生成异常处理代码,提升编译效率。通过`__P`宏,可以在函数声明后添加`throw()`,以明确函数不会抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

__THROW

 

 

Linux/FreeBSD内核的源文件里常会出现这个东东。其实并不复杂,只是简单的宏定义,可以参考以下代码

<sys/cdefs.h>;:
/* GCC can always grok prototypes.  For C++ programs we add throw()
   to help it optimize the function calls.  But this works only with
   gcc 2.8.x and egcs.  */
# if defined __cplusplus && (__GNUC__ >;= 3 || __GNUC_MINOR__ >;=
#  define __THROW       throw ()
# else
#  define __THROW
# endif
# define __P(args)      args __THROW
/* This macro will be used for functions which might take C++ callback
   functions.  */
# define __PMT(args)    args
# define __DOTS         , ...

像这个
static void icmp6_errcount __P((struct icmp6errstat *, int, int));
展开后就是
static void icmp6_errcount (struct icmp6errstat *, int, int) throw();
或者
static void icmp6_errcount (struct icmp6errstat *, int, int);

 

__Pc++调用的情况下,会在函数声明后加入 throw()

表明该函数不会扔出异常,这样避免编译器生成对异常的

处理代码,优化生成结果.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值