考虑这两个函数定义:

void foo() { }

void foo(void) { }

这两者有什么区别吗?如果不是,为什么会有void个理由?审美原因?

推荐答案

C年内:

  • void foo()表示"接受未指定类型的未指定数目的参数的函数foo"
  • void foo(void)表示"不带参数的函数foo"

C++年:

  • void foo()表示"不带参数的函数foo"
  • void foo(void)表示"不带参数的函数foo"

因此,通过编写foo(void),我们可以在两种语言之间实现相同的解释,并使标题具有多语言性(尽管我们通常需要对标题做更多的处理,以使其真正具有跨语言性;也就是说,如果我们在编译C++,则将其包装在extern "C"中).

C++相关问答推荐

了解返回函数指针的函数定义

如何在不修改字符串缓冲区早期使用的情况下覆盖字符串缓冲区

为什么静态说明符为内联函数生成外部定义?

getchar读css + z还是返回css?

VS代码C/C++扩展intellisense无法检测环境特定函数'

C:scanf(%d&q;,...)输入只有一个减号

使用C时,Windows CMD中的argc参数是否包含重定向命令?

非常大的数组的大小

为静态库做准备中的奇怪行为

非正规化边缘毛刺

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

判断X宏的空性

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

如何只获取字符串的第一个单词,然后将其与c中的另一个单词进行比较?

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

初始成员、公共初始序列、匿名联合和严格别名如何在C中交互?

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

&stdbool.h&q;在嵌入式系统中的使用

解密Chrome加密密钥

nullptr_t 是否会 destruct 类型双关或指针转换?