在测试#imported文件中的结构时,Googletest编译失败

时间:2013-07-19 12:21:57

标签: c include c-preprocessor googletest

我有两个文件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。我该怎么办呢?

3 个答案:

答案 0 :(得分:2)

使用标题保护可以防止多次包含标题。

http://en.wikipedia.org/wiki/Include_guard

一个建议是将标头文件添加到C个文件而不是C个文件到另一个C文件。

答案 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以避免所有这些混乱。