2011-04-30 111 views
0

能函数定义是这样的:我可以声明一个函数而不指定其中一个参数的类型吗?

int foo(int temp1, int temp2 temp3) { 
    ... 
} 
temp2temp3,会导致错误的

具体?如果不是,总体效果如何?

+1

你的意思是*“defined”,* not *“called”* - 为什么不自己尝试一下,看它是否会产生编译器错误? – 2011-04-30 17:36:17

+2

你从哪里得到这个可能有效的想法? – 2011-04-30 17:36:23

+1

对社群的一个问题:回答“大声笑”对这类问题过于苛刻? – akappa 2011-04-30 17:36:57

回答

5

你所有错误。这是完全适用于有:

#define temp2 blah) { return 1; } int foo_ (int 
int foo(int temp1, int temp2 temp3) 
{ 
     return 0; 
} 

(这是我第一天早上感觉有点幽默的结果 - 如果你愿意,可以随意倒下;))

+2

+1:你甚至不需要'*',虽然... – 2011-04-30 17:44:30

+3

在这种情况下,整体效果会驱使未来的维护者疯狂 – 2011-04-30 17:46:04

+0

@blueraja-绝对是我想要的:) – 2011-04-30 17:50:30

3

错误是整体效果。

+0

谢谢cnicutar! – adammenges 2011-04-30 17:36:32

+4

标记为CW,因为我不应该为这样的答案获得声望。 – cnicutar 2011-04-30 17:41:48

+0

非常高贵! – 2011-04-30 17:43:54

3

不,这不是有效的C.

0

不,不可能。这是行不通的,因为temp3并不是真正的参数。编译器会出现一个错误。

0

如果EMP2和TEMP3的参数,这样,他们每个人都应该有自己的类型,但是这将提供一个编译错误

0

你写的不是函数的调用方式,而是他们如何被声明。您将需要一个数据类型各形式参数(INT temp1中,诠释TEMP2,INT TEMP3)的前

1

如果你真的想将三个参数传递给一个函数,但你只知道他们两个在编译时的类型,那么你可以使用可变参数来完成它名单。假设你要的第三个参数是一个intdouble,但你必须检查temp1temp2首先要知道它应该是:

#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假定你长大了并对自己的行为负责。

相关问题