我正在处理这个名为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
,但错误仍然存在。
答案 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
中定义的函数,但您也尝试将其用作多个原型中的参数名称。