源代码中的条件编译

标签 c visual-c++

<分区>

我需要在我的代码中使用 strncpy_s。需要使用 msvc71 和 msvc90 编译器编译代码。原来msvc71不支持strncpy_s。我已经实现了我自己的 strncpy_s

版本

所以我只想在编译器是msvc71的时候编译这个strncpy_s的实现。我该怎么做?

最佳答案

使用条件编译不是很好的解决你的问题:如果你以后用另一个编译器或在不同的平台上编译,你将需要添加越来越多的特殊测试来处理这些可能支持或不支持的环境strncpy_s。有一种标准方法可以请求这些扩展函数并检查它们是否可用,但我强烈建议您始终定义您的替换函数,将其命名为其他名称并无条件地使用它。

您可能知道,strncpystrncpy_s 不可互换,它们具有不同的语义,除了目标大小的额外参数。 strncpy 绝对不应该使用,因为它很容易出错:即使你掌握了它特有的副作用,其他程序员以后阅读或修改你的代码也不会。 strncpy_s 有其自身的怪癖:违反约束的行为可能不是您所期望的。

关于源代码中的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35015738/

相关文章:

c++ - 可以从进程核心访问释放的内存段吗?

c++11 - 从包含其他字符的字符串中提取尾随 int

algorithm - 汇编中 x86 上的带符号 64 位乘法和 128 位除法

c++ - 编译器使用的 double 表示的显式规范

visual-c++ - Visual C++ 中是否有 X64 固有的 8 位原子 CAS (cmpxchg)?

c++ - 如何从 C++(跨平台)运行 mercurial 查询?

c - 这两个定义对编译器有何不同?

c - 打开时实时更新文件/proc/<pid>/status

c - 从指针数组返回字符串的函数

C++ WinApi : ReadDirectoryChangesW() Receiving Double Notifications