许多人已经回答了这个问题,并认为在C语言中,函数原型的含义为没有参数。
void func ()
这里的"func"是一个返回空值(void)且参数在此时未知的函数。
此外,他们认为可以这样声明并使用一些参数调用该函数:
func (1, 2, 3);
所以,我做了这个,我进行了一个测试来验证它是否有效,我并不惊讶它是有效的。
这里是func.c,其中包含main()
函数。
#include <stdio.h>
extern void func ();
int main (int ac, char ** av)
{
func (1, 2, 3);
return 0;
}
这里是func1.c,其中包含函数func()
#include <stdio.h>
void func (int a, int b, int c)
{
printf ( "%d, %d, %d\n", a, b, c );
}
这里是我的问题:
问题1:
当我运行此程序时,我得到了预期的输出1、2、3。编写代码的这种方式是安全的吗?也就是说,可以假设ABI(应用二进制接口)可靠地确保在main()
中调用func()
会将三个参数放置在正确的位置(寄存器、堆栈等),以便func()
找到它们吗?
问题2:
如果以上问题的答案是这是一种安全的做法,那么如果func()
是用其他语言实现的,您的答案是否会改变?
1, 2, 3
是类型为int
的字面量——当您调用foo(1, 2, 3)
时,假定未知的原型为void (int, int, int)
。 - user529758