gcc (GCC) 4.7.2
c89
您好,
我的service.h文件中有以下内容
enum service_state_code {
NO_ERROR_OK,
ERROR_INCORRECT_STATE,
ERROR_EMPTY_STRING,
ERROR_NO_COMMAND_FOUND
};
const char *service_state_msg[] = {
"OK:",
"ERROR: Incorrect state for modifying service channel state",
"ERROR: No command found",
"ERROR: No command parameters",
NULL
};
get_channel_service_state(channel_t *channel, const char *msg);
我还有另外两个* .c文件,其中包含service.h文件。
network.c
和socket.c
我用它是这样的:
get_channel_service_state(channel, ss7_service_state_msg[ERROR_INCORRECT_STATE]);
但是,我收到链接器错误抱怨:
multiple definition of service_state_msg first defined here
我知道我收到此错误的原因。由于service_state_msg
每次都被定义为service.h中的全局,因此每次都包含在* .c文件中。
我只想问一下,在多个* .c源文件中使用service_state_msg
的最佳方式是什么?
非常感谢任何建议,
答案 0 :(得分:7)
您可以在标头文件中生成service_state_msg
extern
:
extern const char *service_state_msg[];
然后移动它:
const char *service_state_msg[] = {
"OK:",
"ERROR: Incorrect state for modifying service channel state",
"ERROR: No command found",
"ERROR: No command parameters",
NULL
};
到你的任何一个C文件。或者,您可以将初始化保留在头文件中,但使service_state_msg
静态:
static const char *service_state_msg[] = {
"OK:",
"ERROR: Incorrect state for modifying service channel state",
"ERROR: No command found",
"ERROR: No command parameters",
NULL
};
但请注意,这意味着每个目标文件都将包含service_state_msg
数组的副本,如果更改,则都需要重新编译。
答案 1 :(得分:1)
在.C文件中定义和初始化。在头文件中使用以下内容。
extern char ** service_state_msg; // in the header file