我正在使用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
有人能说出可能出错的地方吗?
答案 0 :(得分:1)
您必须将function_names声明为
const char* const function_names[] = ...
然后符号function_names不应在链接的应用程序中出现两次。
答案 1 :(得分: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};