4

我有一些从 C++ 调用的 C 代码。
标头类似于以下内容:

#ifndef CLibH
#define CLibH

#ifdef __cplusplus
extern "C" {
#endif

//C API
void foo(void);
// ...

#ifdef __cplusplus
}
#endif

#endif

由于我已经在使用extern C
添加nothrow编译器属性有什么好处吗?

#ifndef CLibH
#define CLibH

#ifdef __cplusplus
extern "C" {
#endif

//C API
void foo(void) __attribute__((nothrow));
// ...

#ifdef __cplusplus
}
#endif

#endif

是否extern C使这变得多余?
在这种情况下应用它还有优势吗?

4

1 回答 1

0

是的,它确实。来自 gcc 文档:

例如,可以保证标准 C 库中的大多数函数不会抛出异常,其中 qsort 和 bsearch 采用函数指针参数的显着异常。

于 2016-08-31T18:46:16.273 回答