gpt4 book ai didi

c - 是否可以在预处理时或编译时修改 "function call"

转载 作者:太空狗 更新时间:2023-10-29 15:07:08 25 4
gpt4 key购买 nike

第一个问题:是否可以调用带有某些参数的函数,并且在编译后在预处理时或编译时将其修改为其他内容

#define func(a,b) func(a,sizeof(a),b)

有些人可能会想为什么会出现这样的需求。

实际上,我正在使用 visual studio 2010 在 Windows 中移植代码,并且有一些函数已被弃用,例如 strcpy()、strcat() 等。它说要改用 strcpy_s()。

我知道我可以使用 #pragma disable(warning: ) 或通过提供如下标志来抑制它:

_CRT_NONSTDC_NO_DEPRRECATE
_CRT_SECURE_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS

但我不想忽视或压制它们。

我试图简单地替换字符串而不是使用忽略:

#define strcpy strcpy_s

如这里http://msdn.microsoft.com/en-us/library/td1esda9.aspx我读到如果我不提供第二个参数,就不会有参数不匹配。

我的意思是如果我这样使用应该没问题:

#define strcpy strcpy_s
strcpy(dest,src);

但事实并非如此。它仍然产生警告。

strcpy_s 的定义是:

errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);

第二个问题: 第一个参数是一个指向动态分配内存的指针,所以我如何才能得到这个指针指向的内存大小。虽然我读到它不可行,但必须有某种方式(希望如此)。

顺便问一下,_countof(var) 是什么?

最佳答案

这些函数已弃用。 Microsoft 试图通过错误地声称它们已被弃用来诱使您编写特定于 Microsoft 的代码,即使 ISO WG14 委员会(对它们负责)没有做出这样的声明。

定义三个 _CRT 宏应该被视为将编译器置于“有点接近标准”模式的正确方法,就像 /Za 一样。

关于c - 是否可以在预处理时或编译时修改 "function call",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com