这个问题是`f(void)` 的一个分支,意思是 C++11 或 C 中没有参数?
有几个人回答了这个问题,并认为在 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.cfunc()
#include <stdio.h>
void func (int a, int b, int c)
{
printf ( "%d, %d, %d\n", a, b, c );
}
这是我的问题
问题一:
当我运行这个程序时,我得到了预期的输出 1、2、3。这是一种安全的代码编写方式吗?即,可以假设 ABI 将可靠地确保func()
in的调用main()
将三个参数放在正确的位置(寄存器、堆栈等)func()
以找到它们吗?
问题2:
如果上面 1 的答案是这样做是安全的,那么如果func()
用 C 以外的其他语言实现,你的答案会改变吗?