我正在使用来自Visual C++ 2008的gcc编译代码.代码使用的是errno_t,但在某些版本的gcc头文件中包含的内容<errno.h>并没有定义类型.如何检测类型是否已定义?是否有定义信号表明类型已定义?在未定义的情况下,我想提供typedef以让代码在所有平台上正确编译.
微软errno_t是多余的.errno由ISO C标准定义为可修改的左值int.如果您的代码需要存储errno值,那么您应该将它们放入int.
进行全局搜索和替换s/errno_t/int/,您就完成了.
编辑:此外,您不应该typedef int errno_t在代码中提供,因为所有以名称结尾的名称_t都是保留的.
您无法像检查宏那样检查 typedef,因此这有点棘手。如果您正在使用autoconf,此补丁显示了您需要让 autoconf 检查是否存在errno_t并定义它(如果缺少)的最小更改(typedef 将放置在包含您生成的文件中config.h,并且包含在所有需要的文件中)errno_t)。如果您不使用,autoconf则需要想出某种方法在构建系统中执行相同的操作,或者针对编译器版本宏进行一组非常聪明的测试。