2013-08-15 5 views
-2

У меня есть файл в этом массивном проекте, над которым я работаю, называется timeKeeper.h (и .c)Проблемы с C с включением time.h?

-------------- EDIT ------- -------- Устранена BOOL ВЕЩЬ ВСЕ ЕЩЕ ХОТЯ СЛОМЛЕННОЕ --------------

#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 

Я подозреваю, что хронометрист не знает, что такое time_t, даже если он имеет

#include <time.h> 

Я также получаю ошибки как

implicit declaration of function 'localtime' 

в мое времяKeeper.c файл. И да, timeKeeper.C# включает 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...... 

---- EDIT 2 ------

Я добавил #include <stdbool.h> и изменил Bool на bool в строке 6, но ошибки все еще существуют.

+0

Это возможно в зависимости от включенных включенных до включения 'tineKeeper.h'. Вы также получаете эту ошибку с минимальной тестовой программой на вашей платформе? Btw: Какова ваша платформа? – alk

+0

Вы можете показать начало 'timeKeeper.c'up до включения' timeKeeper.h'. – alk

+0

Когда вы отправляете код, добавление номеров строк в каждую строку не помогает; Мне нравится копировать и вставлять код и компилировать его самостоятельно. Если вам нужно обратиться к номеру строки из сообщения об ошибке, добавьте в эту строку комментарий, например '/ * line 6 * /'. –

ответ

0

В строке 6 есть определение Bool. Может быть, вы не указали определение/Typedef?

0

time() - это функция, определенная в пределах time.h, но вы также пытаетесь использовать ее в качестве имени параметра в нескольких своих прототипах.

+3

Да, это потенциально запутанно, но не ошибка. –

5

Существует нет типа Bool в C. Существует тип bool, но это видно, только если у вас есть #include <stdbool.h>.

Когда я добавляю #include <stdbool.h> и изменяю Bool на bool, ваш код компилируется без ошибок. (Мне также пришлось удалять номера строк.)

Я также предлагаю выбрать другое имя, кроме time, для параметра isAfter и другие функции. time - также имя функции, объявленной в <time.h>. Я не думаю, что это на самом деле вызывает конфликт в этом случае, но уникальные имена избегают путаницы.

Поскольку Bool является непризнанным имя типа, компилятор сообщит о синтаксической ошибке на

Bool isAfter(time_t time); 

Любые ошибки, которые вы видите после того, что, вероятно, будет поддельной. Если вы получите синтаксические ошибки, начните с исправления ошибки на самой ранней из сообщенных строк и последующей перекомпиляции.

EDIT:

основе дальнейших комментариев, добавление и изменение #include <stdbool.h>Bool к bool не кажется помогли. И конкретное сообщение, которое вы получаете, похоже, подразумевает, что time_t не распознается, что, безусловно, не должно происходить.

Попробуйте простой исходный файл 2 строки (и убедитесь, что имя файла имеет .c суффикс):

#include <time.h> 
time_t foo; 

Если это не удается, единственное объяснение я могу думать о том, что ваш компилятор и/или установка библиотеки времени выполнения некорректна.

У вас есть возможность просмотреть предварительно обработанный источник? Если это так, применяя его к указанному выше 2-строчному источнику, вы должны показать предварительно обработанное содержимое <time.h>, которое должно содержать определение для time_t.

+0

Я добавил '#include ' и изменил 'Bool' на' bool', но все равно получаю те же ошибки. – Personofblah

+0

@Personofblah: Это странно; Я сделал именно эти изменения, и заголовок скомпилирован без ошибок. Что произойдет, если вы скомпилируете однострочный файл '.c', который имеет * только *' #include "timeKeeper.h"? Если это не удается, обновите свой вопрос, чтобы показать нам новый источник (но сохраните оригинал там, потому что это то, на чем я основал мой ответ). –

+0

Можете ли вы порекомендовать инструмент для однокомпонентного компиляции? У Atmel Studio нет хорошего способа сделать то, что я знаю. – Personofblah

1

(Предполагая, что вы используете стандарты, соответствующие C компилятор, и что мы имеем дело с микроконтроллером, т.е. автономной среды.)

Процитирует стандарт C:

Соответствующая автономная реализация должна принимать любую строго соответствующую программу, которая не использует сложные типы и в которой использование функций, указанных в разделе библиотеки (раздел 7), ограничивается содержимым стандартных заголовков <float.h>, <iso646.h>, <limits.h>, <stdarg.h>, <stdbool.h>, <stddef.h> и <stdint.h>.

Функциональность <time.h> обычно обеспечивается операционной системой, однако микроконтроллер не обязательно работает один. Таким образом, вам может понадобиться предоставить эту функцию самостоятельно.


this thread.

Задача:

damien_d - 27 февраля 2009 - 1:03 утра

Заголовок сообщения: 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

Ответ:

Кошчи - 27 февраля 2009 - 2:23 утра

Заголовок сообщения: RE: time.h и/или временной библиотеки для C

Цитата: Там кажется, нет ни одного файла заголовка time.h реализован

Конечно нет. Функциональность во времени. H связана с функциями операционной системы, в которых работает код. AVR не имеет операционной системы.

или независимо от того, будет ли время_t определено как на avr-gcc.

В чем проблема. Полное определение time_t в системе зависит от ОС.

Квитирование:

damien_d - 28 февраля 2009 - 6:03 утра

Заголовок сообщения: RE: time.h и/или библиотеки времени для C

Я узнал что-то новое сегодня - для не-размещенных сред C требуется только набор стандартных заголовков.

Угадайте, что пришло время найти лицензионную версию time.h (и реализацию) BSD и взломать ее на содержание моего сердца.

+0

Если нет '', OP получит фатальную ошибку в '#include '. Было бы странно предоставлять '', но не определять 'time_t'. –