Когда можно использовать «void ()» и каковы преимущества этого - PullRequest
0 голосов
/ 23 марта 2011

Я недавно начал изучать язык C и отметил функцию «void ()», однако мне хотелось бы знать, что он делает, и каковы его лучшие области применения, а также, возможно, альтернатива void, которая потенциально более продуктивна,Спасибо.

Ответы [ 4 ]

4 голосов
/ 23 марта 2011

void в C имеет три использования:

  1. Чтобы объявить, что функция не возвращает значение:

    void foo(int x);
    
  2. Чтобы объявить, что функция не принимает параметры:

    int baz(void);
    
  3. (ОПАСНОСТЬ УБИТ РОБИНСОН!) Чтобы объявить «универсальный указатель», который можно передать, например, как. Волшебное печенье или возвращенное кому-либо в обратном вызове, которое должно быть возвращено к исходному типу.

    int register_callback(void (*foo)(void *baz), void *bar);
    

register_callback вызывается с указателем на функцию void, которая в качестве параметра ожидает указатель, который предположительно что-то для нее значит. В какое-то (неуказанное) время в будущем эта функция будет вызываться с параметром bar. Подобные вещи встречаются в некоторых видах встроенных систем управления и в драйверах устройств многократного использования, хотя и не везде.

4 голосов
/ 23 марта 2011

Нет функции с именем void, но функция может быть объявлена ​​с типом возврата void. Это означает, что функция не возвращает значение.

void DoSomething(...)
{
  ....
}

Обновление

void также может использоваться для указания компилятору, что функция не принимает никаких аргументов. Например,

float CalculatePi(void)
{
 ....
}
1 голос
/ 23 марта 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() вызовет ошибки компилятора.

0 голосов
/ 23 марта 2011

Я не думаю, что есть функция void ().

Однако ключевое слово void используется для указания того, что функция ничего не возвращает, например ::

void MyFunction() {
   // function body here
}
...