Jon*_*ler 12
IMNSHO,这是微软的说法"不要把Unix软件放在Windows机器上".这个问题有几个令人沮丧的方面:
strcmpi()不是POSIX函数 - 相关函数定义在<strings.h>和调用strcasecmp()等.也就是说,海湾合作委员会的工具链对某些功能有点粗略 - mktemp()等等.但是,尽管有警告(这是合理的),它确实可以成功编译和链接.
我注意到,MSVC也有一个关于snprintf()等人的帽子.如果它们的功能符合C99标准(以及编译器的其余部分),则永远不会有任何溢出的风险 - 标准要求空终止,与Microsoft的声明相反.
我没有一个很好的解决方案来解决这个问题 - 我不确定是否存在问题.一种可能性是创建一个标题(或标题集)来映射所有实际的POSIX名称,以微软对它们的误解.另外两个是创建一个具有正确POSIX名称的普通函数库,每个名称都调用到Microsoft版本的名称(为您提供大量的四行函数集合 - 声明行,开括号,紧支撑,以及一个return语句,它调用POSIX函数名的Microsoft变体.
有趣的是,Microsoft API调用也会污染用户的名称空间,不会弃用或重命名.