void变量可以用于什么?

Tak*_*1n1 8 c c++ java variables void

例如,如果我创建变量:

void helloWorld;
Run Code Online (Sandbox Code Playgroud)

我该怎么办?因为它什么都不代表,起初我认为没有什么可以用它做的.我知道函数使用void没有返回值,但变量有用吗?

- 编辑 -

我找到了答案.我现在知道在Java,C++和C等编程语言中,void变量是非法的.感谢您的所有答案!

Ser*_* L. 10

void变量在C/C++中无效,因为编译器无法确定它们的大小.void仅作为函数参数列表(不带参数)或返回类型(不返回任何内容)有效.

void *这只是意味着"任何类型的指针",是一个普通的指针类型,但你不能取消对它的引用.

  • 从形式上来说,它们无效的原因是“void”是一个“不完整类型”。 (2认同)

hac*_*cks 5

C99 6.2.6第19段说:

所述空隙类型包括一个空的一组值; 它是一种不完整的类型,无法完成.

此外,void在C中,是一种没有大小的类型.因此,如果要声明类型的变量void,编译器将不知道要为其分配多少内存.
因此,您无法声明void变量,因为它的类型不完整.

void当我们讨论指针(void*)时它很有用,因为它允许你声明一个通用指针而不指定类型.

请阅读Keith Thompson给出的答案,以获得更详细的解释.

  • 该答案未声明void变量:它计算非void变量表达式并将其强制转换为void.我只是试图让`gcc`接受一个变量声明`void helloWorld`(而不是表达`(void)helloWorld`,其中`helloWorld`被声明为非`void`),并且失败了. (2认同)
  • @MarnixKlooster它是无效的,因为1)void是一个不完整的类型(C996.2.5§19)和2)声明没有链接的标识符必须具有完整的类型(C996.7§7).另一方面,你可以有一个(完全没用的)声明,例如`extern void x;` (2认同)
  • @Virgile:`extern void x;`确实有潜在的(非便携式)用途:`&x`对于获取内联汇编或外部asm文件中的asm标签的地址非常有用.这又可以用于从信号处理器确定所保存的程序计数器是否在两个特定的asm标签之间. (2认同)