【发布时间】:2012-12-03 19:51:08
【问题描述】:
我有用 C 实现抽象 serial- 和 socket IO (Linux / Windows) 的函数。
它们都被标记为extern "C",因为它们也可能被 C++ 调用。
在这里使用__attribute__((__nothrow__))(或MinGW Macro __MINGW_NOTHROW)是否安全/我可以假设没有抛出异常吗?
调用函数 - 套接字:
(未列出 WinSock 的所有新增功能)
socketconnect-
send/recv -
close(Windows 上为closesocket) -
sendto/recvfrom
调用函数 - 串行:
由于 windows / linux 之间的串行 IO 代码差异很大,此处并未列出所有函数
-
Linux (GNU)
opentcgetattr-
read/write close
-
Windows (MinGW)
CreateFile-
GetCommState/SetCommTimeouts -
ReadFile/WriteFile CloseHandle
由于 ANSI C 没有异常(如果我错了请纠正我)它们不会被抛出,但是 GCC 扩展和 OS API 调用呢?
文档:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html(参见nothrow)。
【问题讨论】:
-
如果您使用 C(而不是 C++)编写代码,为什么还要为异常烦恼?无论如何,您对它们无能为力。
-
这将允许 GCC 进行一些优化。但是,如果从 C++ 调用,我不想造成麻烦。