我现在正在重构/整理C++程序中使用的一些旧C代码,并定期查看函数,如:

int f(void)

我倾向于这样写:

int f()

是否有任何理由不在整个代码库中用()替换(void)以提高一致性,或者两者之间是否存在我不知道的细微差别?

更具体地说,如果C++中的虚拟成员函数被描述为:

virtual int f(void)

派生类包括一个成员函数:

int f()

这是有效的覆盖吗?此外,基于几乎相同的签名,我可能会遇到任何链接器问题吗?

推荐答案

在C语言中,声明int f(void)表示返回int的函数,该函数不带任何参数.声明int f()表示返回int的函数,该函数接受任意数量的参数.因此,如果你有一个在C中不带参数的函数,那么前者就是正确的原型.

在C++中,我相信int f(void)是不推荐的,int f()是首选的,因为它具体地表示不带参数的函数.

C++相关问答推荐

为什么这个select()会阻止?

GCC:try 使用—WError或—pedantic using pragmas

在32位处理器上优化53—32位模计算>

为什么写入系统调用打印的字符数不正确?

将 typewriter LF打印到Windows终端,而不是隐含的CR+LF

fwrite无法写入满(非常大)缓冲区

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

如何使用[BTStack]BLE发送大型(>;2kb)信息包

Square不与Raylib一起移动

用C++实现余弦函数

如何在GDB中查看MUSL的源代码

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

如何使用libgpio(d)为Raspberry Pi编译C程序?

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

是否定义了此函数的行为?

不使用任何预定义的C函数进行逐位运算

为什么GCC 13没有显示正确的二进制表示法?

如何向 execl 创建的后台程序提供输入?

创建 makefile 来编译位于不同目录中的多个源文件