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)

вспоминается тупняк по недосмотру типа

// ...

void foo(int val);
void bar(int val);

// ...

void troll_your_reviewer(int val) {
// bunch of code
    if (val == 1) return;
    if (val == 2) return

// comments
// more comments

    foo(val);
    bar(val);
}


reprimand ★★★★★
()

т.к. именование типа и значения одним ключевым словом обычно говорит о том, что значение единственно

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

З.Ы. от паскалистов видел такое вот, вдруг тебе от него легче будет:

typedef void procedure;

reprimand ★★★★★
()
Последнее исправление: reprimand (всего исправлений: 1)

Отсюда можно сделать вывод

... что надо открыть стандарт и прочитать:

The void type comprises an empty set of values;

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

В C у пустых структур sizeof() == 0. Что не мешает создавать переменные типа пустой структуры, брать адрес этих переменных и передавать их в функции.

Ого, ништяк, я не знал. Спасибо. В крестах sizeof пустой структуры по стандарту ИМХО >= 1.

// test.c
#include <stdio.h>

struct penis {
};

int main(int argc, char **argv) {
  printf("size of penis: %zu\n", sizeof(struct penis));
  return 0;
}


// test.cpp
#include <cstdio>

struct penis {
};

int main(int argc, char **argv) {
  printf("size of penis: %zu\n", sizeof(penis));
}
$ clang -o test.c ./test.c && ./test.c
size of penis: 0

$ clang++ -o testcpp ./test.cpp && ./testcpp
size of penis: 1
DELIRIUM ☆☆☆☆☆
()
Последнее исправление: DELIRIUM (всего исправлений: 2)
Ответ на: комментарий от anony_mouse

Действительно:

./test.c:3:1: warning: empty struct has size 0 in C, size 1 in C++
      [-Wc++-compat]
struct penis {
^
./test.c:3:1: warning: empty struct is a GNU extension [-Wgnu-empty-struct]
DELIRIUM ☆☆☆☆☆
()

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

Кто поправляет-то?

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

Извините, был в задумчивости) s/ИМХО/ЕМНИП/

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

Ну так и пиши сообщения на С. Зачем ты на форум на русском пишешь?

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

anonimous-mode

Я понял. Ты местный демагог.

В своем глазу бревна не замечаешь?

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

а я говорил что он не допустимый? Вполне себе допустимый =)

reprimand ★★★★★
()
5 ноября 2016 г.
Ответ на: комментарий от nezamudich

Нет такого значения, тип void есть, а значения void нет.

void f()
{
    return void();
}

Значения нет, а value initialization с типом void (приведено выше) скомпилируется как ни в чём не бывало.

Что за говн^Wчудо-язык!

utf8nowhere ★★★
()

тут ещё пока (вроде как) не упоминали «информация»

void-значение не несёт информации - буквально .

то что реализации позволяют быть одно(или несколько)байтным значениям у которых «несколько представлений NaN» это паразитность реализации.

anonymous
()

Странно, что еще не набежали растеры с криками о том что у нас можно делать абстрактные типы-пустышки

UPD: точнее странно, что скалисты понабежали первыми

mersinvald ★★★★★
()
Последнее исправление: mersinvald (всего исправлений: 1)
Ответ на: комментарий от anonymous

void-значение не несёт информации - буквально .

Отсутствие возвращаемого значения это тоже информация.

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