我有两个文件first_pass.c
,其中包含描述mystring.h
的{{1}}。在测试mystring.c
时,我做了以下内容包括
first_pass.c
一切都运作良好,直到我必须在#include "../src/mystring.c"
#include "../src/first_pass.c"
#include <gtest/gtest.h>
中定义一个结构。很简单
mystring.h
然后我在编译typedef struct Split {
char *head;
char *tail;
}Split;
课程的要求是使用 C (非C ++)和MAKE,因此不推荐使用其他测试框架,例如Check。据我所知,它定义了两次struct,第一次加载error: ‘Split’ has a previous declaration as ‘typedef struct Split Split’
而另一次加载mystring.c
。我该怎么办呢?
答案 0 :(得分:2)
答案 1 :(得分:2)
最佳方式:不要包含'.c'文件,但要编译然后单独'.o'并将tem链接在一起。
如果多次包含哦mystring.h
这样的标头是不可避免的,请查找标头保护,例如here in SO
答案 2 :(得分:1)
您需要保护您的结构定义,如下所示
#ifndef SOME_GUARD_NAME
#define SOME_GUARD_NAME
typedef struct Split {
char *head;
char *tail;
}Split;
#endif
由于您要包含“.c
”文件,因此请查看here以避免所有这些混乱。