在C,C++和C#中,void意味着什么?

Nic*_*los 163 c c# c++ terminology language-design

希望得到" 无效 "一词来源的基础知识,以及为什么它被称为无效.这个问题的目的是帮助那些没有C经验的人,并突然看到一个基于C的代码库.

Ger*_*ald 218

基本上它意味着"没有"或"没有类型"

使用void有3种基本方法:

  1. 函数参数:int myFunc(void) - 函数不需要任何操作.

  2. 函数返回值:void myFunc(int) - 函数不返回任何内容

  3. 通用数据指针:void* data - 'data'是指向未知类型数据的指针,不能解除引用

注意:void函数参数在C++中是可选的,因此int myFunc()完全相同int myFunc(void),并且在C#中完全省略.返回值始终是必需的.

  • 在C++中,参数列表中的void是可选的.但是,在C中,它不是可选的:foo()表示它接受任何类型的任意数量的参数,而foo(void)表示它接受零参数. (21认同)
  • 没有不同意,但是另外使用void是在"cast to void"技巧中来抑制未使用值的警告.这有点长,因为它与编译器解释事物的方式并不完全一致,但你可以将其解释为"我正在使用这个值来做什么". (8认同)
  • 参数列表中的void在C++中是可选的,请参阅http://stackoverflow.com/questions/416345/is-fvoid-deprecated-in-modern-c-and-c (6认同)

Joh*_*itb 31

我一直认为这意味着缺席.以下是C语言中与缺席使用相匹配的四种情况

  • R f(void)- 缺少功能参数
  • void f(P)-返回值是不存在的
  • void *p- 缺少指向的类型
  • (void) p- 缺少使用价值

其他C后代用它来做其他事情.该D编程语言使用它的情况下的初始化是不存在的

  • T t = void;- 缺少初始化值

  • `(void)p`做什么?我没有完全理解你所说的"没有使用价值". (4认同)

Rob*_*nes 14

有两种方法可以使用void:

void foo(void);
Run Code Online (Sandbox Code Playgroud)

要么

void *bar(void*);
Run Code Online (Sandbox Code Playgroud)

第一个表示没有传递参数或没有返回参数.

第二个告诉编译器没有与数据相关联的类型,这意味着在将其转换为已知类型之前,您无法使用指向的数据.

例如,void*当你有一个接口调用一个参数不能提前知道的函数时,你会看到很多用过的东西.

例如,在推迟工作时的Linux内核中,你将设置一个函数,以便在后一次运行时给它一个指向要运行的函数的指针和一个指向要传递给函数的数据的指针:

struct _deferred_work {
sruct list_head mylist;
.worker_func = bar;
.data        = somedata;
} deferred_work;
Run Code Online (Sandbox Code Playgroud)

然后一个内核线程遍历一个延迟工作列表,当它到达这个节点时,它会有效地执行:

bar(somedata);
Run Code Online (Sandbox Code Playgroud)

然后在酒吧你有:

void bar(void* mydata) {
    int *data = mydata;
    /* do something with data */;
}
Run Code Online (Sandbox Code Playgroud)


sha*_*oth 12

这意味着"没有价值".您void用来表示函数不返回值或没有参数或两者都没有.与英语中的单词void的典型用法非常一致.