我刚刚遇到某人的C代码,我很困惑为什么要编译.有两点我不明白.
首先,与实际函数定义相比,函数原型没有参数.其次,函数定义中的参数没有类型.
#include <stdio.h>
int func();
int func(param)
{
return param;
}
int main()
{
int bla = func(10);
printf("%d", bla);
}
Run Code Online (Sandbox Code Playgroud)
为什么这样做?我已经在几个编译器中测试过,它运行正常.
什么是更好的:void foo()或void foo(void)?随着虚空,它看起来丑陋和不一致,但我被告知它是好的.这是真的?
编辑:我知道一些旧的编译器做了奇怪的事情,但如果我只使用GCC,那void foo()好吗?将foo(bar);随后被接受?
我认为区别在于declaration没有参数类型......
为什么这样做:
int fuc();
int fuc(int i) {
printf("%d", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这无法编译:
int fuc();
int fuc(float f) {
printf("%f", f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
随着消息:
错误:'fuc'的冲突类型.注意:具有默认促销的参数类型不能与空参数名称列表声明匹配
我刚才读到:"C void arguments"关于C中这些函数定义之间的差异:
int f(void)
Run Code Online (Sandbox Code Playgroud)
和
int f()
Run Code Online (Sandbox Code Playgroud)
理解第二种形式意味着一个函数返回带有任意数量参数的整数,我想知道我们如何实际访问和使用这些未知参数?
我很想得到示例代码和解释.
另外,我知道的可变参数的在C机构(与va_arg,va_end,va_start函数)和将高兴地听到这个机构和之间的差异f()的形式如上所述.
非常感谢!
对于这个引用:
函数声明符中不属于该函数定义的标识符列表应为空.
标识符列表和参数列表之间有什么区别,有人可以提供此引用的示例.