包括标题不起作用

时间:2014-12-12 07:54:33

标签: c++ include header-files

我正在尝试使用time.hsys/time.h标头中的多个声明的库。 无论我做什么,我都无法在任何cpp文件中使用标头。这个定义似乎根本没有定义。

这就是time.h的样子 -

#ifndef IW_STD_TIME_H
#define IW_STD_TIME_H

#include <sys/types.h>

#ifndef _TIME_T_DEFINED
#define _TIME_T_DEFINED
typedef long time_t;
#endif

#define CLOCKS_PER_SEC 1000

#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif

#ifndef _TM_DEFINED
struct tm
{
    int tm_sec;     /* seconds after the minute - [0,59] */
    int tm_min;     /* minutes after the hour - [0,59] */
    int tm_hour;    /* hours since midnight - [0,23] */
    int tm_mday;    /* day of the month - [1,31] */
    int tm_mon;     /* months since January - [0,11] */
    int tm_year;    /* years since 1900 */
    int tm_wday;    /* days since Sunday - [0,6] */
    int tm_yday;    /* days since January 1 - [0,365] */
    int tm_isdst;   /* daylight savings time flag */
};
#define _TM_DEFINED
#endif

struct timespec
{
    time_t tv_sec;          /* Seconds.  */
    long int tv_nsec;       /* Nanoseconds.  */
};

S3E_BEGIN_C_DECL

#ifdef __ARMCC_VERSION
#define localtime localtime_rvct
#define localtime_r localtime_rvct_r
#endif

time_t time(time_t *t);

void tzset(void);

char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

clock_t clock(void);

double difftime(time_t time1, time_t time0);

int nanosleep(const struct timespec *req, struct timespec *rem);


#if defined __GNUC__ && !defined __APPLE__ && !defined I3D_ARCH_MIPS
    extern char *_tzname[2];
    extern int _daylight;
    extern long int _timezone;
    #define tzname _tzname
    #define daylight _daylight
    #define timezone _timezone
#else
    extern char *tzname[2];
    extern int daylight;
    extern long int timezone;
#endif

#define CLOCK_REALTIME 1
#define CLOCK_MONOTONIC 2

typedef int clockid_t;

int clock_getres(clockid_t clk_id, struct timespec *res);

int clock_gettime(clockid_t clk_id, struct timespec *tp);

int clock_settime(clockid_t clk_id, const struct timespec *tp);

S3E_END_C_DECL

#include <sys/time.h>

#endif /* !IW_STD_TIME_H */

这就是sys / time.h的定义方式 -

#ifndef IW_STD_SYS_TIME_H
#define IW_STD_SYS_TIME_H

#include "s3eTypes.h"
#include <time.h>

#ifndef _WINSOCK2API_

S3E_BEGIN_C_DECL

#ifndef _TIME_T_DEFINED
#define _TIME_T_DEFINED
typedef long time_t;
#endif

typedef long suseconds_t;
struct timeval
{
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

struct timezone
{
    int tz_minuteswest;     /* minutes west of Greenwich */
    int tz_dsttime;         /* type of DST correction */
};

int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv , const struct timezone *tz);

int utimes(const char *filename, const struct timeval times[2]);

S3E_END_C_DECL

#endif  // XBOX

#endif // !IW_STD_SYS_TIME_H

我将它们作为#include<time.h>包含在cpp文件中,甚至typedef long time_t;都没有。但是,当我将声明放在cpp文件本身时,它可以工作。我相信我在这里错过了一些愚蠢的东西。有什么想法吗?

PS:这是文件中提到的宏的定义方式 -

#define S3E_BEGIN_C_DECL extern "C" {
#define S3E_END_C_DECL }

更新:

错误是这样的 -

错误3错误C2079:&#39; tv&#39;使用未定义的结构&#39; timeval&#39; 错误4错误C3861:&#39; gettimeofday&#39;:标识符未找到

似乎根本没有定义标题中的所有定义。这些标题随处可见。

1 个答案:

答案 0 :(得分:0)

哦,这是因为我的项目中已经存在time.h,并且#include_next指令用于替换默认标头。我之前评论过该指令,所以我想这就是为什么IDE显示正确的文件,但编译器正在考虑更换的文件。我使用#include_next更改了#include,并将更具体的默认文件路径更改为错误。