gpt4 book ai didi

C++ 将 #define 复制到 char 数组

转载 作者:行者123 更新时间:2023-11-30 17:46:13 26 4
gpt4 key购买 nike

我有以下声明:

#define ERROR   0x01
..
UINT32 res=ERROR;

仅给定变量 res,是否可以将字符串 "ERROR" 复制到 char 数组中?

澄清:

可能是我表达得不够清楚。我正在调用一个返回值的 DLL。这些值可以这样解释:

switch (res)
{
case ERROR:
strcpy(arr, "ERROR");break;
case ...
}

由于有很多选项,而且开关会很大,我想也许有一个快捷方式......

最佳答案

#define ERROR   0x01

定义常量积分文字0x01,预处理器将执行以下行:

UINT32 res = ERROR;

进入:

UINT32 res = 0x01;

在编译开始之前。没有字符数组

<小时/>

如果您想复制常量的关联名称以避免执行以下操作:

case ERROR:
strcpy(arr, "ERROR"); break;
case X:
strcpy(arr, "X"); break;
case Y:
strcpy(arr, "Y"); break;
...

然后您可以创建一个具有静态结构的帮助器,通过给定代码检索名称,但为了类型安全,我会尽可能避免使用 #define 。类似的东西(这只是一个概念):

const char* getRetCodeName(const UINT32 code) {
static std::map<int, const char*> codes;
static int firstCall = 1;
if (firstCall) {
codes[ERROR] = "ERROR";
codes[X] = "X";
codes[Y] = "Y";
firstCall = 0;
}
return codes[code];
}

在调用者的代码中:

UINT32 res = someCall();
const char* retCodeName = getRetCodeName(res);

关于C++ 将 #define 复制到 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19400358/

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