能函數定義是這樣的:我可以聲明一個函數而不指定其中一個參數的類型嗎?
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