LINUX.ORG.RU

понять Си

 , ,


3

2

посоветуйте, что почитать для поверхностного понимания философии языка Си.
я вот экспериментирую (Си+ООП из C++), решил сделать банальную функцию, возвращающую строку с датой:

char* sh_time::getTimeString() {
  time_t t = time(0);
  struct tm * now = localtime( & t );
  //(*s) << printf("%d-%02d-%02d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
  size_t sz;
  sz = snprintf(NULL, 0, "%d-%02d-%02d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
  s = (char *)malloc(sz + 1);
  snprintf(s, sz+1, "%d-%02d-%02d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
  return(s);
}

плюс отдельная функция, делающая free(s).
это у языка такая фишка - каждый на ровном месте огород городит - или же для подобных задач есть стандартизированные пути решения? (я не про готовые функции, а про традиционные способы решения задач)

★★★

Последнее исправление: CYB3R (всего исправлений: 4)
Ответ на: комментарий от arturpub

Один анон в этом треде описал это как архитектурный маразм. Очень верно подметил, я щитаю.

Этот маразм иногда бывает нужен.

Есть даже мнение, что разделение логики аллокации (как и любого взаимодействия со средой) от алгоритма - Хорошая Идея. А вот впердоливание констант времени компиляции где попало - очень плохая.

Всё зависит от конкретной ситуации. Скажем, все кресты разом - это один большой архитектурный маразм. Тем не менее, писать высокопроизводительный графический движок я бы ни на Си, ни на managed языках не взялся. Тут кресты - единственный вариант.

anonymous
()
Ответ на: комментарий от anonymous

Потому что сконцентрированное управление ресурсами рулит, и поэтому кресты так привлекательны, и даже были бы вином, если бы не религиозные фанатики. Я в целом с тобой согласен, просто представляю публике другой конец палки, только и всего.

arturpub ★★
()
Ответ на: комментарий от anonymous

впердоливание констант времени компиляции где попало - очень плохая.

Не где попало, а в связанном месте. Меняя функцию, меняешь связанный дефайн. Не нравятся дефайны, экспортируй константу. Это и есть компайл-тайм инкапсуляция без потери абстракции аллокатора.

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.