<分区>
我需要在我的代码中使用 strncpy_s
。需要使用 msvc71 和 msvc90 编译器编译代码。原来msvc71不支持strncpy_s
。我已经实现了我自己的 strncpy_s
所以我只想在编译器是msvc71的时候编译这个strncpy_s
的实现。我该怎么做?
标签 c visual-c++
<分区>
我需要在我的代码中使用 strncpy_s
。需要使用 msvc71 和 msvc90 编译器编译代码。原来msvc71不支持strncpy_s
。我已经实现了我自己的 strncpy_s
所以我只想在编译器是msvc71的时候编译这个strncpy_s
的实现。我该怎么做?
最佳答案
使用条件编译不是很好的解决你的问题:如果你以后用另一个编译器或在不同的平台上编译,你将需要添加越来越多的特殊测试来处理这些可能支持或不支持的环境strncpy_s
。有一种标准方法可以请求这些扩展函数并检查它们是否可用,但我强烈建议您始终定义您的替换函数,将其命名为其他名称并无条件地使用它。
您可能知道,strncpy
和 strncpy_s
不可互换,它们具有不同的语义,除了目标大小的额外参数。 strncpy
绝对不应该使用,因为它很容易出错:即使你掌握了它特有的副作用,其他程序员以后阅读或修改你的代码也不会。 strncpy_s
有其自身的怪癖:违反约束的行为可能不是您所期望的。
关于源代码中的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35015738/