不久前,我尝试使用 Visual Studio 2010 编译一个 MFC 程序,该程序使用了我在 Visual Studio 2003 中编写的库。毫不奇怪,我收到了一堆关于弃用和使用各种字符串函数的安全版本的警告。
然后我更新了库中的相关函数以使用安全函数,并且它编译得很好。
后来我尝试在另一个系统上使用 Visual Studio 2003 再次编译它,但因为安全功能不存在而烦恼。
我决定创建一种混合方法,允许我编译在任一环境中使用该库的程序,如果可用,则使用安全函数,如果不可用,则将它们别名为旧函数。
起初,我考虑检查每个函数以查看是否存在安全版本,但这行不通,并且需要对每个函数进行单独的工作:
#ifndef strcpy_s
#define strcpy_s(a,b,c) strcpy(a,c)
#endif
#ifndef strcat_s
#define strcat_s(a,b,c) strcat(a,c)
#endif
…
所以我想找出一种方法来确定安全功能是否存在。我知道它们是在 Visual Studio 2005 中引入的,但是有吗#define
或者可以如下使用的东西?
#ifndef SECURE_FUNCTIONS // or #ifdef VS_VER_2005, #if (VS_VER >= 0x2005) etc.
#define strcpy_s(a,b,c) strcpy(a,c)
#define strcat_s(a,b,c) strcat(a,c)
…
#endif
我检查了crtdefs.h
但发现没有什么用处。