LINUX.ORG.RU

Передать void в функцию

 ,


0

1

Когда ньюфаги пишут, что функция void f(<неважно>) ничего не возвращает, то их поправляют: «нет, вы не правы, ньюфаги, эта функция возвращает void».

Отсюда можно сделать вывод, что тип void в C/C++ это тип-синглтон, т.к. именование типа и значения одним ключевым словом обычно говорит о том, что значение единственно. См. тип () в Haskell.

Тогда почему нельзя создавать переменные типа void (НЕ указатель на него!) и передавать их в функции, принимающие void? Это бы позволило создавать композиции функций: g(f(<аргументы для f>)), где

void f(<параметры f>);
<возвращаемый тип g> g(void);
не рассматривая void как частный случай при композиции.



Последнее исправление: anony_mouse (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

Ответом будет тот факт, что авторы C/C++ мало что слышали о теории типов.

Ну что-то они всё же слышали. Раз знают, что константность нельзя просто так сбрасывать при касте поинтеров. Или что просто так кастовать можно к указателю на базовый, а не наоборот.

void появился далеко не сразу.

void вроде сразу был, это указатель на него ввели при стандартизации.

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

Константность и наследование - это к Страуструпу, это он кое-что знал. А в K&R void не было, потому и говорят с тех пор будто процедур в языке нет, и int by default оттуда же растет.

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

void вроде сразу был, это указатель на него ввели при стандартизации.

https://ru.wikipedia.org/wiki/Void

Среди современных языков программирования ключевое слово void впервые появилось в Си++ для поддержки концепции обобщенных указателей. Тем не менее, благодаря скорому заимствованию у Си++, первым нормативным документом, содержащим это ключевое слово, стал стандарт языка Си, опубликованный ANSI в 1989 г. В рамках языка Си++ void был стандартизован в 1998 г.

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

Среди современных языков программирования ключевое слово void впервые появилось в Си++ для поддержки концепции обобщенных указателей.

Если уж трясти вики"знаниями", то английская пишет

By the time Bjarne Stroustrup began his work on C++ in 1979–1980, void and void pointers were part of the C language dialect supported by AT&T-derived compilers.

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

By the time Bjarne Stroustrup began his work on C++ in 1979–1980, void and void pointers were part of the C language dialect supported by AT&T-derived compilers.

Ага, и? В других компиляторах их не было, и язык к тому времени был достаточно развит и широко использовался. В любом случае, суть в том, что void был запилен как костыль.

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

Ага, и?

Это расходится с твоей цитатой про «void впервые появился в C++ и потом попал в C»

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