Timespec не найден во времени .h
Мне нужно переписать приложение с С++ на C. Я использую gcc и Eclipse на Ubuntu 12.04. При этом я столкнулся с этой ошибкой
../src/TTNoddy.c: In function ‘main’:
../src/TTNoddy.c:16:2: error: unknown type name ‘timespec’
Вот мой фрагмент кода, который воспроизводит проблему
#include <time.h>
int main(void) {
timespec TS;
TS.tv_nsec = 1;
return 0;
}
Я запутался здесь. Я - кодер С++ и никогда не писал чистого приложения C в своей жизни, но справочная страница для clock_gettime
четко указывает, что timespec
найден в файле заголовка time.h, который я включая сюда. Что я пропустил?
Ответы
Ответ 1
timespec - это struct
, вам нужно явно указать компилятору это. Если вы внимательно прочитаете страницу руководства, вы увидите, что это указано.
Это должно работать:
#include <time.h>
int main(void) {
struct timespec TS;
TS.tv_nsec = 1;
return 0;
}
Дополнительная заметка. Если она была определена как typedef struct
, вам не нужно было бы добавлять часть struct
вручную. Но вы должны предположить, что большинство/все чистые C-структуры не определены как typedef
Ответ 2
Это не должно быть просто timepec, поскольку timespec - это структура. Это должно быть struct timespec
. Пожалуйста, внесите изменения в свой код.
Ответ 3
Я получил эту ошибку при попытке скомпилировать рабочий проект под Visual Studio 2015.
Решение заключалось в том, чтобы добавить HAVE_STRUCT_TIMESPEC
в определения препроцессора.
Через GUI: Свойства проекта (панорамирование) > Страницы свойств (значок) > Свойства конфигурации > C/С++ > Препроцессоp > Определения препроцессорa > Изменить > Добавить HAVE_STRUCT_TIMESPEC
Или вручную: отредактируйте каждый файл проекта и замените каждый экземпляр <PreprocessorDefinitions>
(может быть несколько на каждый файл) с чем-то вроде:
<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
NB: я нашел этот ответ где-то в проблеме Github, поэтому я размещаю его здесь.
Ответ 4
Эта проблема на некоторое время доставляла мне проблемы, и в конечном итоге я определил в своем коде struct timepec. (просто скопировал его, прямо из человека nanosleep)
#include <time.h>
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
int main(void) {
struct timespec TS;
TS.tv_nsec = 1;
return 0;
}
Ответ 5
Я знаю, что это старый вопрос, но у меня возникла та же проблема после обновления с gcc 6.3 до 7.1. После просмотра изменений вы должны определить _GNU_SOURCE, чтобы включить struct_timespec.h.