任何人都可以确认标准所说的vararg函数的默认返回类型.我正在编译以下代码:
int main()
{
maw(32,3,95,38,20,15);
return 0;
}
int maw(int a,int b,...)
{
int *p=&b,i=0;
while(i++<a)
printf("\t%d",*p++);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:
foo.c:9: error: conflicting types for ‘maw’
foo.c:10: note: a parameter list with an ellipsis can’t match an empty parameter name list declaration
foo.c:4: error: previous implicit declaration of ‘maw’ was here
Run Code Online (Sandbox Code Playgroud)
但如果在定义maw期间,如果我提到它,因为void maw(int a, int b, ...)汇编很好.
我可以从中得出vararg函数的默认返回类型可能不是int.
标准在这方面说了什么?谁能为我确认一下?
我知道,如果我只是标准化代码,它将完美运行.我已经做了.这没有问题.
我的观点是:这段代码有什么问题?它应该运行得很好.这样的代码不运行没有任何错误吗?
int main()
{
abc();
.....
return 0;
}
abc()
{
.......
}
Run Code Online (Sandbox Code Playgroud)
当使用变量参数函数时,问题就出现了.我知道标准对函数的默认declration的含义.
Chr*_*ung 11
关于将函数原型放在第一位的其他答案是正确的.
另外,为了便于移植,不要...通过使用指向最后一个(非vararg)参数的直接指针来访问参数,因为那时你必须关心目标平台的对齐和堆栈方向.相反,使用<stdarg.h>和va_*宏来处理varargs.
| 归档时间: |
|
| 查看次数: |
2505 次 |
| 最近记录: |