1) Требуется написать корректный и переносимый код на языке С: функция foo, единственное предназначение которой - возврат указателя на саму себя. Иными словами, вот такой код должен компилироваться, работать и соответствовать стандарту:
XaeroX писал: Ну как минимум твой код в с++ не скомпилируется, потому что там нет приведения от void* по умолчанию.
Это в стандарте так описано или ещё какие-то компиляторы так делают? У меня-то собирается.
Задача именно в том, чтобы все было по стандарту или работало на компиляторах всех платформ?
Цитата:
XaeroX писал: sizeof(void*) равен sizeof(foo_t)
Может быть иначе? Не представляю при каких условиях.
Добавлено 14-08-2016 в 09:41:
Допустим такой код исправляет то о чем ты говоришь? Или я каких-то принципиальных моментов задачи не понимаю?
ComradeAndrew писал: Может быть иначе? Не представляю при каких условиях.
Гм. Ну я тоже не представляю, при каких условиях int может быть не четырёхбайтовым, а в байте может быть не 8 битов. Но переносимый код должен учитывать, что стандарт описывает не всё, и кое-какие вещи остаются на усмотрение разработчика компилятора.
Цитата:
ComradeAndrew писал: Допустим такой код исправляет то о чем ты говоришь?
nemyax
Ну если функция будет ещё что-то делать - то вполне может пригодиться.
Например, если это цепочка функций для конечного автомата, где иногда надо несколько раз вызвать одну и ту же функцию, прежде чем двигаться дальше.
Раз вы все такие умные - давайте передавать указатель не на функцию, а на структуру, в которой указатель на функцию и рядом размер void в байтах.
Добавлено 14-08-2016 в 14:23:
Цитата:
nemyax писал: Пригодиться такое может, или это чисто упражнение на повозиться?
если в названии фигурирует слово "сообразительность", то практического применения оно иметь не может. Потому что у практических задач зачастую не существует правильного решения. И оптимальность выбора показывает лишь время.