错误:'what'的冲突类型

时间:2012-03-24 00:05:54

标签: c gcc embedded mips

我正在开发一种嵌入式系统,它提供了某些类型的接口。

问题是通过包含来自c标准库的某些标题我得到error: conflicting types

我使用gettimeofday而我只使用struct timeval,但是使用sys/time.h time_t也会阻碍系统定义的{{1}}。< / p>

我无法触及这些代码中的任何一个,我需要它们。

有没有办法解决这些问题? (我应该能够使用系统的声明类型和c头中声明的一些函数,包含已经由系统完成的一些声明的头文件。)

3 个答案:

答案 0 :(得分:5)

您可以使用宏重命名time_t typedef之一,而无需修改任何标题:

#define time_t LIBC_time_t
#include <sys/time.h>
#undef time_t

#include <header_which_defines_the_time_t_you_want.h>

这不能保证有效,但它确实在很多时候都有用。

答案 1 :(得分:2)

解决这个问题的一种方法,或多或少的最后手段是引入另一个抽象级别,并提供包装API来隔离麻烦的标题。

如果你有这样的事情:

my_file.c:

#include <sys/time.h>
#include <some_system_header.h>

void foo(void)
{
     struct timeval tv;
     gettimeofday(&tv);
     ....
}

变成

my_gettimeofday.c:

#include <sys/time.h> //only sys.time.h here, no system headers
#include "my_gettimeofday.h"

void my_gettimeofday(struct my_timeval *my_tv)
{
   struct timeval tv;
   gettimeofday(&tv);
   my_tv->sec  = tv.tv_sec;
   my_tv->usec = tv.tv_usec;
}

my_gettimeofday.h:

struct my_timeval {
   long sec, usec; //adjust to your platform if needed
};
void my_gettimeofday(struct my_timeval *my_tv);

my_file.c:

//no sys/time.h here.
#include <some_system_header.h>
#include "my_gettimeofday.h"
void foo(void)
{
     struct my_timeval tv;
     my_gettimeofday(&tv);
     ....
}

答案 2 :(得分:1)

如果只有一个函数(gettimeofday)和一个类型,在单独的源代码文件中构建一个'wrapper'函数,请为gettimeofday调用包含正确的头。

int my_gettimeofday(struct my_timeval *restrict tp, void *restrict tzp) {
    timeval t;
    t.time_t = my_timeval.time_t;
    // ...
    int ret = gettimeofday(&t, tzp);
    my_timeval.time_t = t.time_t;
    // .. copy the others
}

创建新类型struct my_timeval,该内容与正在发生冲突的内容相同。冲突已经分开了。

是吗?