Размер хранилища timespec неизвестен

Я видел это решение, но Я получаю те же ошибки. Для класса нам пришлось переключиться на компилятор c99 вместо gnu, но теперь кажется, что временная спецификация нарушена. Наряду с «размер хранилища timespec неизвестен», я получаю кучу других ошибок, таких как «CLOCK_MONOTONIC undeclared», «разыменование указателя на неполный тип« struct timespec »» и предупреждения о неиспользуемой переменной, но я предполагаю, что они будут прочь, как только я решу проблему с компилятором.

Я бы не подумал, что что-то не так с тем, как я объявляю переменные timespec,

struct timespec startTime;


person grizzle    schedule 04.03.2017    source источник
comment
нам пришлось переключиться на компилятор c99 вместо gnu - это определенно не веская причина. gcc поддерживает C99 так же, как и C11, просто узнайте об опции -std=. Другой вопрос, почему вы изучаете версию C, которая была отменена 6 лет назад с текущим и единственным стандартным C11. Напишите свою проблему: прочитайте Как спросить и предоставьте минимально воспроизводимый пример. Судя по всему, вы получили доступ к внутренностям struct, который не должны использовать. Это означает, что ваш код сломан по дизайну.   -  person too honest for this site    schedule 04.03.2017
comment
В наших новых деталях задания он специально сказал нам использовать флаг -std=c99. Извините, я хотел указать это в описании. Я не хочу использовать это, мы должны. Также не могли бы вы рассказать о попытке доступа к внутренностям структуры.   -  person grizzle    schedule 04.03.2017
comment
В своем вопросе вы подразумеваете, что не используете gcc, потому что он не совместим с c99. Но, согласно вашему комментарию, вы используете gcc (что противоречит вашему утверждению в вопросе), только с вариантом, который я рекомендую. Вы должны сначала понять, что происходит, прежде чем программировать. И вы должны внимательно прочитать мой предыдущий комментарий и попытаться понять. Это не кормление с ложки!   -  person too honest for this site    schedule 04.03.2017
comment
Трудно ответить на подобный вопрос без кода и некоторой другой базовой информации, такой как используемая вами ОС.   -  person anonymoose    schedule 04.03.2017
comment
@Olaf gnu — это флаг gcc, -std=gnu99.   -  person n. 1.8e9-where's-my-share m.    schedule 05.03.2017
comment
Если вам говорят использовать C99, используйте C99. struct timespec и CLOCK_MONOTONIC не являются частью C99. Используйте что-то другое.   -  person n. 1.8e9-where's-my-share m.    schedule 05.03.2017
comment
@n.m.: Как вы написали: gnu99, а не gnu. И это все еще будет c99, только с расширениями gcc. Остальная часть строки добавляет путаницы, так как нет отдельного компилятора c99 (-std=c99 просто деактивирует расширения и выдает предупреждения о некоторых из них.   -  person too honest for this site    schedule 05.03.2017
comment
@Olaf да, OP использует небрежную терминологию, но сообщение ясное, нет необходимости переходить в полный педантичный режим. Расширения являются точкой здесь. struct timespec является одним из них.   -  person n. 1.8e9-where's-my-share m.    schedule 05.03.2017


Ответы (2)


Поскольку такая поддержка «часов» не C99, а POSIX, она не включена по умолчанию.

Чтобы включить его, вы хотите передать параметр -D_POSIX_C_SOURCE=199309L компилятору или поставить

#define _POSIX_C_SOURCE 199309L

в самом начале рассматриваемого исходного файла(ов).

См. также man clock_gettime для справки.

person alk    schedule 05.03.2017

Установите флаг диалект C на диалект GNU ISO C99:

-std=gnu99

person Danijel    schedule 27.04.2021