-2

我正在处理的这个大型项目中有一个名为 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-----

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

4

4 回答 4

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>和更改Boolbool似乎没有帮助。而且您收到的特定消息似乎确实意味着time_t无法识别——这当然不应该发生。

尝试一个简单的 2 行源文件(并确保文件名有.c后缀):

#include <time.h>
time_t foo;

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

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

于 2013-08-15T18:14:37.473 回答
2

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

让我引用 C 标准:

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

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


引用这个线程

挑战:

damien_d - 2009 年 2 月 27 日 - 上午 01:03

帖子主题: time.h 和/或 C 的计时库

我正在使用 winavr 20081205。

似乎没有实现 time.h 头文件,无论是通过查看源代码,在主页上的 file:///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

帖子主题: RE:time.h 和/或 C 的计时库

Quote: 似乎没有实现time.h头文件

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

Quote: 或任何时间_t 将被定义为在avr-gcc 上。

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

致谢:

damien_d - 2009 年 2 月 28 日 - 上午 06:03

帖子主题: RE:time.h 和/或 C 的计时库

我今天学到了一些新东西——非托管 C 环境只需要标准头文件的一个子集。

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

于 2013-08-16T07:11:04.900 回答
0

在第 6 行有一个定义Bool。也许你不包括定义/Typedef ?

于 2013-08-15T18:13:35.887 回答
0

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

于 2013-08-15T18:14:11.093 回答