0

我正在使用 Qt (Mac) 中的 C 控制台项目,因为客户端不想要 C++

将所有内容都放在一个 C 文件中,一切都运行良好,但当然,它开始变得太大了。

所以我创建了一个新的 juicy_lucy.h 和 juicy_lucy.c 文件,首先,只是将一些东西从 main.c 转移到 juicy_lucy.h 现在看起来像这样

#ifndef JUICY_LUCY_H
#define JUICY_LUCY_H

#define command_count   14
char  *function_names[command_count] = {
                    "CLEAR_LCD", "PUT_LCD", "SET_VAR", "ADC_READ",
                    "BIT_WRITE", "BIT_READ", "BIT_WAIT",
                    "FAIL_LESS", "FAIL_MORE", "FAIL_HIGH","FAIL_LOW",
                    "AVR_PROG","AVR_READ_SERIAL","AVR_WRITE_SERIAL"
                     };
int   param_count[command_count] = {0,3,2,1,2,1,2,2,2,1,1,1,1,1};
#endif // JUICY_LUCY_H

当然,在 main.c 和 juicy_lucy.c 中都包含标头

现在,当我构建时,我得到

juicy_lucy.o 和 main.o 中的重复符号 _function_names 用于架构 x86_64

任何人都可以建议可能出了什么问题吗?

4

2 回答 2

1

在您的 .h 中:

extern char *function_names[command_count];
extern int param_count[command_count];

在您的 .c 文件之一中:

char  *function_names[command_count] = {
                    "CLEAR_LCD", "PUT_LCD", "SET_VAR", "ADC_READ",
                    "BIT_WRITE", "BIT_READ", "BIT_WAIT",
                    "FAIL_LESS", "FAIL_MORE", "FAIL_HIGH","FAIL_LOW",
                    "AVR_PROG","AVR_READ_SERIAL","AVR_WRITE_SERIAL"
                     };
int   param_count[command_count] = {0,3,2,1,2,1,2,2,2,1,1,1,1,1};
于 2013-06-25T09:16:24.687 回答
1

您必须将 function_names 声明为

const char* const function_names[] = ...

那么符号 function_names 不应在您的链接应用程序中出现两次。

于 2013-06-25T09:09:53.280 回答