能函数定义是这样的:我可以声明一个函数而不指定其中一个参数的类型吗?
int foo(int temp1, int temp2 temp3) {
...
}
与
temp2
和
temp3
,会导致错误的
具体?如果不是,总体效果如何?
能函数定义是这样的:我可以声明一个函数而不指定其中一个参数的类型吗?
int foo(int temp1, int temp2 temp3) {
...
}
与
temp2
和
temp3
,会导致错误的
具体?如果不是,总体效果如何?
你所有错误。这是完全适用于有:
#define temp2 blah) { return 1; } int foo_ (int
int foo(int temp1, int temp2 temp3)
{
return 0;
}
(这是我第一天早上感觉有点幽默的结果 - 如果你愿意,可以随意倒下;))
+1:你甚至不需要'*',虽然... – 2011-04-30 17:44:30
在这种情况下,整体效果会驱使未来的维护者疯狂 – 2011-04-30 17:46:04
@blueraja-绝对是我想要的:) – 2011-04-30 17:50:30
错误是整体效果。
谢谢cnicutar! – adammenges 2011-04-30 17:36:32
标记为CW,因为我不应该为这样的答案获得声望。 – cnicutar 2011-04-30 17:41:48
非常高贵! – 2011-04-30 17:43:54
不,这不是有效的C.
不,不可能。这是行不通的,因为temp3并不是真正的参数。编译器会出现一个错误。
如果EMP2和TEMP3的参数,这样,他们每个人都应该有自己的类型,但是这将提供一个编译错误
你写的不是函数的调用方式,而是他们如何被声明。您将需要一个数据类型各形式参数(INT temp1中,诠释TEMP2,INT TEMP3)的前
如果你真的想将三个参数传递给一个函数,但你只知道他们两个在编译时的类型,那么你可以使用可变参数来完成它名单。假设你要的第三个参数是一个int
或double
,但你必须检查temp1
或temp2
首先要知道它应该是:
#include <stdarg.h>
int foo(int temp1, int temp2, ...) {
va_list ap;
int temp_int;
double temp_double;
va_start(ap, temp2);
/*
* Figure out what type you want the third argument to be
* and use va_arg(ap, int) or va_arg(ap, double) to pull
* it off the stack.
*/
va_end(ap);
/*
* Get on with what foo() is really all about (including
* return an int.
*/
}
这种类型的黑客不会保护你对某人的话说foo(1, 2)
,foo(3, 4, "fish")
,或类似的诡计,但这是C和C假定你长大了并对自己的行为负责。
你的意思是*“defined”,* not *“called”* - 为什么不自己尝试一下,看它是否会产生编译器错误? – 2011-04-30 17:36:17
你从哪里得到这个可能有效的想法? – 2011-04-30 17:36:23
对社群的一个问题:回答“大声笑”对这类问题过于苛刻? – akappa 2011-04-30 17:36:57