Альтернатива структуры тм - PullRequest
2 голосов
/ 05 марта 2010

Существует ли какая-либо другая альтернативная структура данных вместо struct tm (имеющая ту же память, что и эта структура)? Чтобы я мог использовать strftime без объявления <time.h>

Мне известно о том, что полагаться на неявное заявление нехорошо, но я столкнулся с этим вопросом в интервью.

РЕДАКТИРОВАТЬ: Чтобы быть точным, меня попросили напечатать месяц для соответствующего целого числа, используя стандартную библиотечную функцию, но не разрешено включать любой заголовочный файл.

Ответы [ 4 ]

1 голос
/ 05 марта 2010

Единственные мысли, которые у меня возникают, это то, что интервьюер ожидал печатать строки месяца, игнорируя локаль, используя собственный массив символов const char с названиями месяцев, или один из тех плохо определенных " интерактивных " вопросов, на которые, как вы полагаете останавливаться и продолжать задавать вопросы, чтобы уточнить, что на самом деле хочет интервьюер. Явно вы хотите заявить, что хотите знать, какой тип ответа ищет интервьюер. Например, просто фрагмент короткого кода, игнорируя такие детали, как проверка ошибок и проблемы с локалью или реентерабельностью, или ответ для какой-то нестандартной встроенной или устаревшей среды, ища другие функции стандартной библиотеки C (ctime ??) или платформу / ОС конкретный ответ?

ObCode:

const char* months[] = { "Jan", "Feb", ..., "Dec" };
...
printf("Month: %s\n", months[i]);

Или, если дико «боковой мыслитель» в системе Unix / Linux:

char str[PATH_MAX];
...
assert(i >= 0 && i < 12);
cmd = snprintf(cmd, sizeof(cmd), "cal %d 2010 | head -1", i);
FILE* pipe = popen(cmd);
fread(str, 1, sizeof(str), pipe);
printf("Month: %s\n", str);

Чисто плохая идея. :)

1 голос
/ 05 марта 2010

Нет, вам нужно использовать time.h включаемый файл.

Однако, если вы действительно хотите использовать strftime и компилировать без ошибок или предупреждений, выможет переопределить тип данных struct в вашем C-файле, а также прототип функции для использования без включения этого файла.Вы можете назвать свой тип структуры другим именем, если оно совпадает с тем, которое в настоящее время находится в вашем файле time.h .

0 голосов
/ 05 марта 2010

Использование библиотечной функции требует , чтобы вы включили заголовочный файл ...

Распечатка названия месяца - я полагаю, вам разрешено stdio.h - не зависит от того, можете ли вы использовать strftime.

#include <stdio.h>

const char * months[] = {
    "January",
    "February",
    "March",
    "April",
    "May",
    ...
    "December"
};

int main () {
    int i = 0;
    for (; i < 12; ++i)
        printf ("Month %d: %s\n", i + 1, months[i]);
    return 0;
}

Я точно говорю о твоих изменениях. Используя только int, вы можете распечатать месяц, связанный с ним. Но сама печать, как уже упоминалось, требует своего собственного ...

0 голосов
/ 05 марта 2010

Пока вам не нужен доступ к членам struct tm, вы можете просто использовать его предварительное объявление, например:

struct tm ;

Но для использования strftime () вам также потребуется объявление его прототип.Вы не хотите работать там, где они считают такие сомнительные методы полезными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...