void function()和void function(void)一样吗?

Keyser 2008-06-30 06:20:42
我怎么一直觉得他们一样呢?
好多年写C++代码都是用void function();代表无参数
我最近在写C时发现,似乎void function();是指任意参数,而只有
void function(void);才是真正的无参数。

是这样的吗?
还是C和C++有区别?
C是怎么样的?C++是怎么样的?
...全文
1343 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2008-07-01
  • 打赏
  • 举报
回复
如果没记错的话C里面不一样,应该是被兼容的一个错误。
C++里面就一样了,有明确的定义。
Secrete_Hunter 2008-07-01
  • 打赏
  • 举报
回复
我们说了不算~都是编译器的事情~
Keyser 2008-07-01
  • 打赏
  • 举报
回复 1
[Quote=引用 9 楼 Icicly_qcmos 的回复:]
Kxx和Rxx,是远古c神话故事中的2个半神,因为远古时代生产力低下,他们也没有弄明白到底函数声明怎么写,所以就遗留下了一个错误用法。又因为“神谕”都是对的的原因,标准一直兼容了这个错误
[/Quote]

说实话还是不懂。
jy01807853 2008-07-01
  • 打赏
  • 举报
回复 1

Kxx和Rxx,是远古c神话故事中的2个半神,因为远古时代生产力低下,他们也没有弄明白到底函数声明怎么写,所以就遗留下了一个错误用法。又因为“神谕”都是对的的原因,标准一直兼容了这个错误
再见神一般的人物
9楼高人啊~~~~~~~~~~~
再请问下, 论坛引用别人的话是杂搞的, 不懂
在回复这没看到选择, 每次这样[Quote={0}]{1}[/Quote]或
[Quote]{0}[/Quote] 太累
prgmBaggio 2008-06-30
  • 打赏
  • 举报
回复
declare 的时候编译器 仅关注函数名,而不关注参数
yuzl32 2008-06-30
  • 打赏
  • 举报
回复
不一样!在C中,void function() 代表参数未定.void function(void) 代表该方法无参数
在C++中,2者一样的含义.
Icicly_qcmos 2008-06-30
  • 打赏
  • 举报
回复
Kxx和Rxx,是远古c神话故事中的2个半神,因为远古时代生产力低下,他们也没有弄明白到底函数声明怎么写,所以就遗留下了一个错误用法。又因为“神谕”都是对的的原因,标准一直兼容了这个错误
Keyser 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mLee79 的回复:]
K&R中一直都这样,函数声明都不写参数列表的,貌似关键字void都没有, 有啥好稀奇的...
ANSI中不推荐但兼容...
[/Quote]

我觉得很稀奇,因为我都不知道K&R是什么,大师解答一下?
mLee79 2008-06-30
  • 打赏
  • 举报
回复
K&R中一直都这样,函数声明都不写参数列表的,貌似关键字void都没有, 有啥好稀奇的...
ANSI中不推荐但兼容...

Keyser 2008-06-30
  • 打赏
  • 举报
回复
void function(void);

int main()
{
int i = 5;

function();

return 0;
}

#include <stdio.h>

void function(int i)
{
printf("%d\n", i);
}


这样也能顺利执行,那个i也不知道函数从拿取的,反正是取到了,而且程序运行正常,也不报个“堆栈被破坏”什么的。
真是汗。
Keyser 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mLee79 的回复:]
C 中 void function() == void function( ... )
Cpp 中 一样 ...
[/Quote]

我试了还真不一样,至少在C里

各位可以试一下,VC6中:

测试一:
void function();

int main()
{
int i = 5;

function(i);

return 0;
}

#include <stdio.h>

void function(int i)
{
printf("%d\n", i);
}


结果打印出5

测试二:
void function(void);

int main()
{
int i = 5;

function(i);

return 0;
}

#include <stdio.h>

void function(int i)
{
printf("%d\n", i);
}


编译器报告两个警告
--------------------Configuration: Anything - Win32 Debug--------------------
Compiling...
main.c
E:\Code\Cpp\Application Manage\MultiAgentTest\UnitTest\Anything\main.c(7) : warning C4087: 'function' : declared with 'void' parameter list
E:\Code\Cpp\Application Manage\MultiAgentTest\UnitTest\Anything\main.c(15) : warning C4027: function declared without formal parameter list
Linking...

Anything.exe - 0 error(s), 2 warning(s)

但硬去执行的话,也没问题。这可能跟_cdecl的调用规则有关,换了__stdcall之后就不让编译了

--------------------Configuration: Anything - Win32 Debug--------------------
Compiling...
main.c
E:\Code\Cpp\Application Manage\MultiAgentTest\UnitTest\Anything\main.c(7) : warning C4087: 'function' : declared with 'void' parameter list
E:\Code\Cpp\Application Manage\MultiAgentTest\UnitTest\Anything\main.c(15) : error C2709: 'function' : formal parameters length in bytes differs from previous declaration
E:\Code\Cpp\Application Manage\MultiAgentTest\UnitTest\Anything\main.c(1) : see declaration of 'function'
E:\Code\Cpp\Application Manage\MultiAgentTest\UnitTest\Anything\main.c(15) : warning C4027: function declared without formal parameter list
Error executing cl.exe.

Anything.exe - 1 error(s), 2 warning(s)
mLee79 2008-06-30
  • 打赏
  • 举报
回复
C 中 void function() == void function( ... )
Cpp 中 一样 ...
luozhi9 2008-06-30
  • 打赏
  • 举报
回复
一样的,

写代码的习惯而已...
george3038 2008-06-30
  • 打赏
  • 举报
回复
一样,一样的。
clhposs 2008-06-30
  • 打赏
  • 举报
回复

void function();

void function(void);

//一样吧,小菜飘过

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧