nal*_*zok 10 c parameters declaration command-line-arguments function-declaration
例如,
#include <stdio.h>
void foo();
int main(void)
{
foo();
foo(42);
foo("a string", 'C', 1.0);
return 0;
}
void foo()
{
puts("foo() is called");
}
Run Code Online (Sandbox Code Playgroud)
输出:
foo() is called
foo() is called
foo() is called
Run Code Online (Sandbox Code Playgroud)
这段代码编译得很好(没有使用clang的警告)并运行良好.但我想知道传递给的值会发生什么foo()?他们被推入堆栈还是被丢弃?
也许这个问题听起来毫无用处,但它确实有意义.例如,当我有int main(),而不是int main(void)传递一些命令行参数时,行为main()会受到影响吗?
此外,在使用时<stdarg.h>,...ISO C 之前至少需要一个命名参数.我们是否可以使用这样的声明void foo()从函数的零参数传递到无限参数?
我注意到这void foo()是一个"非原型声明",这void foo(void)是一个"原型宣言".这有点相关吗?
澄清
似乎这个问题被标记为重复,空参数列表是什么意思?[重复](有趣的是,这个问题也是重复的......).事实上,我不认为我的问题与那个问题有关.它侧重于" void foo()C中的含义",但我知道这意味着"我可以传递任意数量的论据",而且我也知道这是一个过时的功能.
但这个问题完全不同.关键字是"假设".我只是想知道我是否传递了不同数量的参数void foo(),就像上面的示例代码一样,它们可以在里面使用foo()吗?如果是这样,这是怎么做到的?如果没有,传递的参数会有什么不同吗?那是我的问题.
在 C 中,void foo()声明一个带有未指定数量的参数的函数。函数按以下方式声明:
return-type function-name(parameter-list,...) { body... }
Run Code Online (Sandbox Code Playgroud)
parameter-list是函数采用逗号分隔的参数列表。如果没有给出参数,则该函数不接受任何参数,并且应该使用一组空括号或关键字 void 进行定义。如果参数列表中变量前面没有变量类型,则假定为 int。
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |