void function()和void function(void)一样吗?
时间:2008-07-24 16:54:21
来源:论坛整理 作者: 编辑:chinaitzhe
好多年写C 代码都是用void function();代表无参数
我最近在写C时发现,似乎void function();是指任意参数,而只有
void function(void);才是真正的无参数。
是这样的吗?
还是C和C 有区别?
C是怎么样的?C 是怎么样的?
网友回复:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ void function(); void function(void); //一样吧,小菜飘过
网友回复:一样,一样的。
网友回复:一样的,
写代码的习惯而已...
网友回复:C 中 void function() == void function( ... )
Cpp 中 一样 ...
网友回复:
我试了还真不一样,至少在C里
各位可以试一下,VC6中:
测试一:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ void function(); int main() { int i = 5; function(i); return 0; } #include <stdio.h> void function(int i) { printf("%d\n", i); }
结果打印出5
测试二:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ 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)
网友回复:
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ void function(void); int main() { int i = 5; function(); return 0; } #include <stdio.h> void function(int i) { printf("%d\n", i); }
这样也能顺利执行,那个i也不知道函数从拿取的,反正是取到了,而且程序运行正常,也不报个“堆栈被破坏”什么的。
真是汗。
网友回复:K&R中一直都这样,函数声明都不写参数列表的,貌似要害字void都没有, 有啥好稀奇的...
ANSI中不推荐但兼容...
网友回复:
我觉得很稀奇,因为我都不知道K&R是什么,大师解答一下?
网友回复:Kxx和Rxx,是远古c神话故事中的2个半神,因为远古时代生产力低下,他们也没有弄明白到底函数声明怎么写,所以就遗留下了一个错误用法。又因为“神谕”都是对的的原因,标准一直兼容了这个错误
网友回复:不一样!在C中,void function() 代表参数未定.void function(void) 代表该方法无参数
在C 中,2者一样的含义.
网友回复:declare 的时候编译器 仅关注函数名,而不关注参数
网友回复:
Kxx和Rxx,是远古c神话故事中的2个半神,因为远古时代生产力低下,他们也没有弄明白到底函数声明怎么写,所以就遗留下了一个错误用法。又因为“神谕”都是对的的原因,标准一直兼容了这个错误
再见神一般的人物
9楼高人啊~~~~~~~~~~~
再请问下, 论坛引用别人的话是杂搞的, 不懂
在回复这没看到选择, 每次这样或
太累
网友回复:
说实话还是不懂。
网友回复:我们说了不算~都是编译器的事情~
网友回复:假如没记错的话C里面不一样,应该是被兼容的一个错误。
C 里面就一样了,有明确的定义。
关键字:void,function,void,function,void,
上一篇:高手帮我看看程序,编译出错。
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面