Pra*_*ngh 5 c macros visual-studio-2010 preprocessor-directive
第一个问题:是否可以使用某些参数调用一个函数,并在编译之后在预处理时或编译时将其修改为其他类似的东西
#define func(a,b) func(a,sizeof(a),b)
Run Code Online (Sandbox Code Playgroud)
有些人可能会想到为什么会出现这样的需求.
实际上我使用visual studio 2010在Windows中移植代码,并且有一些函数被弃用,如strcpy(),strcat()等.它说使用strcpy_s()代替.
我知道我可以使用#pragma disable(warning: )或通过提供以下标志来抑制它:
_CRT_NONSTDC_NO_DEPRRECATE
_CRT_SECURE_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS
Run Code Online (Sandbox Code Playgroud)
但我不想忽视或压制它们.
我试着只是简单地替换字符串而不是忽略使用:
#define strcpy strcpy_s
Run Code Online (Sandbox Code Playgroud)
就像在这里http://msdn.microsoft.com/en-us/library/td1esda9.aspx我读过,如果我不提供第二个arg,那么参数不会不匹配.
我的意思是如果我这样使用它应该没问题:
#define strcpy strcpy_s
strcpy(dest,src);
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.它仍然会产生警告.
strcpy_s的定义是:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
Run Code Online (Sandbox Code Playgroud)
第二个问题:第一个参数是一个指向动态分配内存的指针,所以如何获得该指针指向的内存大小.虽然我读到这是不可行的,但必须有某种方式(希望如此).
顺便问一下是_countof(var)什么?
这些函数并未被弃用。Microsoft 试图通过错误地声称这些代码已被弃用来诱导您编写 Microsoft 特定的代码,尽管 ISO WG14 委员会(负责这些代码的委员会)并未做出此类声明。
定义三个_CRT宏应该被视为将编译器置于“更接近标准”模式的正确方法,就像/Za.
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |