我需要在代码中使用strncpy_s
。代码需要使用msvc71以及msvc90编译器进行编译。事实证明,msvc71不支持strncpy_s
。我已经实现了自己的strncpy_s
所以我只想在编译器是msvc71时编译strncpy_s
的这个实现。我怎么能这样做?
答案 0 :(得分:3)
使用条件编译对您的问题不是一个很好的解决方案:如果您以后使用其他编译器或在不同的平台上进行编译,则需要添加越来越多的特殊测试来处理这些可能支持或不支持的环境{ {1}}。有一种标准方法可以请求这些扩展功能并检查它们是否可用,但我强烈建议您随时定义替换功能,将其命名为其他功能并无条件使用。
您可能知道,strncpy_s
和strncpy
不可互换,它们具有不同的语义,超出了目标大小的额外参数。绝对不应该使用strncpy_s
,因为它容易出错:即使你掌握了它特有的副作用,其他程序员以后阅读或修改你的代码也不会。 strncpy
有自己的怪癖:违反约束的行为可能不是你所期望的。