Недавно я начал изучать язык C и заметил функцию "void()", однако я хотел бы знать, что она делает, и ее лучшие точки применения, а также, возможно, альтернативу void, которая потенциально более продуктивна. Спасибо.
Когда можно использовать void() и каковы преимущества этого
Ответы (4)
Не существует функции с именем void
, но функция может быть объявлена с возвращаемым типом void
. Это означает, что функция не возвращает значение.
void DoSomething(...)
{
....
}
Обновить
void
также можно использовать, чтобы указать компилятору, что функция не принимает никаких аргументов. Например,
float CalculatePi(void)
{
....
}
f(void)
означает, что функция не принимает аргументов, а f()
означает, что для аргументов не выполняется проверка типов.
- person dan04; 23.03.2011
void
в C имеет три применения:
Чтобы объявить, что функция не возвращает значение:
void foo(int x);
Чтобы объявить, что функция не принимает параметры:
int baz(void);
(ОПАСНО БУДЕТ РОБИНСОН!) Чтобы объявить «универсальный указатель», который можно передать, например. волшебное печенье или передается кому-то в обратном вызове, чтобы вернуться к исходному типу.
int register_callback(void (*foo)(void *baz), void *bar);
register_callback
вызывается с указателем на функцию void, которая ожидает в качестве параметра указатель, который предположительно что-то для нее значит. В некоторый (неопределенное) время в будущем эта функция будет вызвана с bar в качестве параметра. Вы можете увидеть подобные вещи в определенных видах встроенных исполнительных устройств и многоразовых драйверов устройств, хотя и не так часто.
void*
, а не void
. Это 2 очень разные вещи.
- person pmg; 23.03.2011
volatile
и вы хотите успокоить компилятор. В моих макросах также есть кое-что, что часто бывает удобно, P99_NOP
, которое расширяется до (void)0
. Например, если вы хотите объявить макрос с несколькими операторами, включая break
, вы можете сделать if (1) { .... } else P99_NOP
вместо обычно используемого do { ... } while(0)
.
- person Jens Gustedt; 23.03.2011
void
, упомянутое в стандарте как таковое. Поскольку вы утверждаете общее утверждение о C, оно отсутствовало. Вот и все.
- person Jens Gustedt; 23.03.2011
Когда полезно использовать void
в качестве аргументов функции?
#include "stdlib.h"
#include "stdio.h"
void foo();
int main()
{
foo(5); // Passing 5 though foo has no arguments. Still it's valid.
return 0;
}
void foo()
{
printf("\n In foo \n") ;
}
В приведенном выше фрагменте, хотя прототип foo()
не имеет аргументов, он по-прежнему допустим для передачи ему чего-либо. Так вот, чтобы таких вещей не случилось -
void foo(void) ;
Теперь гарантируется, что передача чего-либо в foo()
вызовет ошибки компилятора.
void
в качестве аргумента функции полезен. Итак, выложил этот фрагмент.
- person Mahesh; 23.03.2011
foo(5)
НЕДЕЙСТВИТЕЛЬНЫЙ, т.е. вызывает UB. Чтобы быть действительным, его нужно было бы вызывать без параметров в соответствии с определением функции (не объявлением). Компилятор использует объявление, чтобы узнать о типе возвращаемого значения (и проверить аргументы): в приведенной выше программе проверка аргументов не выполняется, но аргументы в любом случае должны соответствовать определению функции.
- person pmg; 23.03.2011
<stdlib.h>
и <stdio.h>
(обратите внимание, что вы не используете в своей программе ничего, объявленного в <stdlib.h>
).
- person pmg; 23.03.2011
Я не думаю, что есть функция void().
Однако ключевое слово void
используется для обозначения того, что функция ничего не возвращает, например:
void MyFunction() {
// function body here
}
void
. Можете ли вы рассказать нам, что именно вы видели, на примере? - person Jon   schedule 23.03.2011