Вопрос по struct, c – timepec не найден в time.h

15

Мне приходится переписывать приложение с C ++ на 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 ++ и никогда в жизни не писал приложений на чистом C, но это страница руководства дляclock_gettime ясно указывает на то, чтоtimespec находится в заголовочном файле time.h, который я включаю здесь. Что я пропустил ??

Ваш Ответ

4   ответа
2

Я получил эту ошибку при попытке скомпилировать рабочий проект подVisual Studio 2015.

Решение было добавитьHAVE_STRUCT_TIMESPEC к определениям препроцессора.

Through the GUI: Свойства проекта (панорамирование) & gt; Страницы свойств (значок) & gt; Свойства конфигурации & gt; C / C ++ & gt; Препроцессор & gt; Определения препроцессора & gt; Изменить & gt; добавлятьHAVE_STRUCT_TIMESPEC

Or manually: Отредактируйте каждый файл проекта и замените каждый экземпляр<PreprocessorDefinitions> (может быть несколько на файл) с чем-то вроде:

<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

NB: I found this answer где-то в вопросе Githubпоэтому я размещаю это здесь.

Также смTimespec redefinition error а такжеTimespec :struct type Error c2011.
1

Эта проблема на некоторое время доставила мне проблемы, и в конечном итоге я определил,struct timespec в моем коде. (просто скопировал, прямо от человека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;
}
20

Таймспек являетсяstruct, вам нужно явно сообщить об этом компилятору. Если вы внимательно прочитаете справочную страницу, вы увидите, что она такова.

Это должно работать:

#include <time.h>

int main(void) {
    struct timespec TS;
    TS.tv_nsec = 1;

    return 0;
}

Additional note: Если бы он был определен какtypedef struct, вам не нужно было бы добавлятьstruct расстаться вручную. Но вы должны предположить, что большинство / все чистые структуры C не определены какtypedef

Также обратите внимание, что timespec - это не часть C89 / C99, а POSIX.stackoverflow.com/questions/3875197/std-c99-wtf-on-linux
Благодарю. Я знал, что это структура, это просто C ++, где работает мой код. Я никогда не знал, что вам нужно было явно объявлять каждую временную спецификацию сначала с помощью struct. Я думаю, что будет много различий, которые я собираюсь найти, как это. mathematician1975
3

Это не должно быть просто timepec, так как timespec - это структура. Так должно бытьstruct timespec, Пожалуйста, измените ваш код соответственно.

Похожие вопросы