有没有办法(编译器扩展是可接受的)包含 C 标头并将包含的 C 函数标记为noexcept,但不修改标头?
例如,我有一个 C 库及其头文件header.h。不会将任何 C++ 回调传递给它,因此它永远不会抛出异常。我可以将包含的 C 函数标记为noexcept或告诉编译器它们永远不会抛出异常,以便编译器不必生成未使用的代码并为调用者启用一些可能的优化吗?请注意,使用 C 库的 C++ 代码应该仍然能够使用异常(因此不能选择禁用整个程序的异常)。
extern "C" {
#include "header.h" // Is there a way to mark included C functions here as noexcept?
}
Run Code Online (Sandbox Code Playgroud)
没有您正在寻找的方法。
例如,您可以做的就是根本不使用标头。编写您自己的标头,其中函数标记为 noexcept。当然,这有一个缺点,即您必须维护新标头并使其与库中的更改保持同步。
或者 - 如果您可以放弃不修改标头的前提 - 您可以将 noexcept 添加到标头,同时通过将 C++ 功能包装在宏中仍然保持与 C 的兼容。例如,C 标准库就是这样编写的,因为它们是由 C++ 标准库继承的。
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |