包含time.h的C中的问题?

时间:2013-08-15 18:08:21

标签: c atmel time.h

我正在处理这个名为timeKeeper.h(和.c)的大型项目中的文件

--------------编辑---------------固定的东西仍然被破坏---------- ----

#ifndef TIMEKEEPER_H_
#define TIMEKEEPER_H_

#include <time.h>
#include <stdbool.h>

bool isAfter(time_t time);
void setTime(char seconds, char minutes, char hours, char day,
        char month, char year);
    void tickSeconds(void);
time_t getCurrentTime(void);
time_t createTime(char seconds, char minutes, char hours, char day,
        char month, char year);
void startTime(void);
time_t addSeconds(int seconds, time_t time);
long timeRemaining(time_t time);
void rtc_set(char seconds, char minutes, char hours, char days, char months,
    char year);
 #endif

当我尝试构建项目时,此文件中存在大量错误(以及任何使用time.h的文件)。以下是timeKeeper.h中的一些错误:

expected ')' before 'time'        Line 6
expected '"', ',', ';','asm', or '__attribute__' before 'getCurrentTime'    Line 10

我怀疑timeKeeper不知道time_t是什么,即使它有

#include <time.h>

我也遇到了像

这样的错误
implicit declaration of function 'localtime'

在我的timeKeeper.c文件中。是的,timeKeeper.c #includes timeKeeper.h

非常感谢任何帮助。

----附加信息----- 我正在使用Atmel Studio 6.0 这是timeKeeper.c

#include "FreeRTOS.h"
#include "task.h"
#include "print_funcs.h"

#include "timeKeeper.h"
#include "telemetryLookup.h"

void timeTask(void* pvParameters);

time_t TIME;
blah blah blah......

----编辑2 ------

我在第6行添加了#include <stdbool.h>并将Bool更改为bool,但错误仍然存​​在。

4 个答案:

答案 0 :(得分:5)

C中没有Bool类型。bool类型,但只有#include <stdbool.h>时才可见。

当我添加#include <stdbool.h>并将Bool更改为bool时,您的代码会毫无错误地编译。 (我还必须删除行号。)

我还建议为time和其他功能选择isAfter以外的名称。 time也是<time.h>中声明的函数的名称。在这种情况下,我认为它实际上不会引起冲突,但是唯一的名称可以避免混淆。

由于Bool是无法识别的类型名称,因此编译器会在

上报告语法错误
Bool isAfter(time_t time);

之后您看到的任何错误都可能是虚假的。如果出现语法错误,请首先在最早报告的行上修复错误,然后重新编译。

编辑:

根据进一步的评论,添加#include <stdbool.h>并将Bool更改为bool似乎没有帮助。你得到的特定信息似乎暗示time_t不被承认 - 这肯定不会发生。

尝试使用简单的2行源文件(并确保文件名后缀为.c):

#include <time.h>
time_t foo;

如果失败,我能想到的唯一解释是您的编译器和/或运行时库安装以某种方式损坏。

您是否可以选择查看预处理来源?如果是这样,将其应用于上述2行来源应该会显示<time.h>的预处理内容,其中应包含time_t的定义。

答案 1 :(得分:1)

(假设您使用符合标准的C编译器,并且我们正在处理微控制器,即独立环境。)

让我引用C标准:

  

符合标准的独立实现应接受任何严格符合的程序,该程序不使用复杂类型,并且使用库条款(第7条)中指定的功能仅限于标准标题 <float.h> <iso646.h> <limits.h> <stdarg.h> < / strong>, <stdbool.h> <stddef.h> <stdint.h>

<time.h> 的功能通常由操作系统提供,但微控制器不一定运行一个。因此,您可能需要自己提供此功能。


引用this thread

挑战:

  

damien_d - 2009年2月27日 - 01:03 AM

     

发布主题: time.h和/或C的计时库

     

我正在使用winavr 20081205。

     

似乎没有time.h头文件实现,通过查看源代码,在主页上的文件:/// C:/ WinAVR-20081205 / doc / avr-libc ... dules.html,或者当我尝试将头文件包含在项目中时。例如:

     

<强>代码:

     

#include "time.h"

     

time_t testTime;

     

生成以下编译器错误:

     

<强>代码:

     

../Clock/clock.c:4:18: error: time.h: No such file or directory   ../Clock/clock.c:6: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'testTime'

     

make: *** [clock.o] Error 1

响应:

  

Koshchi - 2009年2月27日 - 02:23 AM

     

发表主题: RE:time.h和/或C的时间库

     

<强>引用:   似乎没有实现time.h头文件

     

当然没有。 time.h中的功能处理运行代码的操作系统的功能。 AVR没有操作系统。

     

<强>引用:   或者无论time_t如何定义为avr-gcc。

     

问题的核心是哪个。系统上time_t的完整定义取决于操作系统。

确认:

  

damien_d - 2009年2月28日 - 06:03 AM

     

发表主题: RE:time.h和/或C的时间库

     

我今天学到了新东西 - 非托管C环境只需要一部分标准标头。

     

猜猜是时候找到一个BSD许可版本的time.h(和实现)并将其破解为我心中的内容。

答案 2 :(得分:0)

第6行有Bool的定义。也许你没有包含定义/ Typedef?

答案 3 :(得分:0)

time()time.h中定义的函数,但您也尝试将其用作多个原型中的参数名称。