Не удается скомпилировать простой код D

Я компилирую простой код:

import std.c.time;
.
.
.
timespec zero;
nanosleep(&zero, null);
.
.
.

Что я получаю:

Error: undefined identifier timespec
Error: undefined identifier nanosleep

std.c.time - это просто ярлык для time.h C. Если я вызову другие функции, определенные в time.h, скажем, clock(), все в порядке. Если я пишу аналогичный код на C (с nanosleep()), то все в порядке. В time.h я вижу, что объявления timespec и nanosleep помещаются под каким-то #ifdef, возможно, это как-то связано с моей проблемой?

Как я могу заставить его скомпилироваться?

Моя рабочая среда: dmd v2.059 Ubuntu 12.04


d
person segfault    schedule 30.06.2012    source источник
comment
Почему бы не использовать std.datetime?   -  person DejanLekic    schedule 30.06.2012


Ответы (2)


timespec и nanosleep упоминаются ровно 0 раз в стандарте C99. Он не является частью стандарта C, его нельзя найти в стандартном файле time.h и, следовательно, нельзя найти в std.c.time.

person orlp    schedule 30.06.2012
comment
Да, да ... На самом деле, я понял это в тот момент, когда опубликовал этот вопрос. Правильное место для поиска, конечно, не time.h, а time.di в среде выполнения D. - person segfault; 30.06.2012
comment
@segfault Если это ответ на ваш вопрос, не забудьте принять его. Прямо сейчас ваш вопрос указан как оставшийся без ответа, потому что вы еще не приняли ответ. - person Jonathan M Davis; 02.07.2012

Как правильно заметил nightcracker, nanosleep() не относится к стандарту C99, однако он относится к POSIX, следовательно, все, что нужно, это import core.sys.posix.time;. Один общий вывод, ищите D библиотеки/интерфейсы.

person segfault    schedule 30.06.2012