gpt4 book ai didi

c++ - const 静态数组的条件编译

转载 作者:行者123 更新时间:2023-11-28 04:28:42 29 4
gpt4 key购买 nike

我正在尝试创建一个错误枚举和在同一个文件中对齐的关联文本描述符。我有一个包含以下内容的 system.cpp 文件:

#define SYSTEMCODE
#include "myerrors.h"

文件 myerrors.h 包含:

typedef enum errors {
OK,
BADERROR,
LASTENUM } ERR;
#ifndef SYSTEMCODE
extern char const *_errtext[];
#else
const char * _errtext[ERR::LASTENUM +1] = {
"OK",
"BADERROR",
"LASTENUM" };
#undef SYSTEMCODE
#endif

我在所有需要错误服务的源中包含了 system.h,它们没有定义 SYSTEMCODE。

我希望只有 system.cpp 文件会编译文本数组,而所有其他文件只会有一个外部引用。 system.cpp 对象没有 _errtext 数组,因此导致链接错误。我禁用了预编译的头文件,并且我已经尝试了很多变体。 MSDEV 做错了。

有什么想法吗?

最佳答案

通常,在我工作过的所有项目中,我都看到过这样做。

创建文件myerror.h:

#ifndef _MYERROR_H__
#define _MYERROR_H__

#ifdef __cplusplus
extern "C" {
#endif

typedef enum errors {
OK,
BADERROR,
LASTENUM
} ERR;

extern const char *err_msg(ERR err);

#ifdef __cplusplus
} // extern C
#endif

然后是一个文件myerror.cpp:

#include "myerror.h"

static const char *_errtext[] = {
"OK",
"BADERROR",
"LASTENUM"
};

const char* err_msg(ERR error){
return _errtext[error];
}

这样你只需要从所有你想要的文件中包含 myerror.h 并在你想以文本格式打印错误时调用 err_msg(error) 。所以在另一个文件中你会有:

#include "myerror.h"
int method(){
ERR whatever = OK;
std::cout << err_msg(whatever);
... // Some other stuff here
}

我不确定您为什么要在同一个文件中完成它,但正如我所说,这就是我通常看到的完成方式。

关于c++ - const 静态数组的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573595/

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