我在Stephen G Kochan的書中發現了這個代碼,Programming in c。這可能嗎?函數參數聲明問題來自C程序員Stephen Kochan
float absolute_value(x)
float x;
{
-----
-----
}
所以,正如你所看到的,參數x在它被用作方法參數後被聲明。這在G ++中引發了一個明顯的編譯錯誤。
那麼,哪個C編譯器支持這個?
我在Stephen G Kochan的書中發現了這個代碼,Programming in c。這可能嗎?函數參數聲明問題來自C程序員Stephen Kochan
float absolute_value(x)
float x;
{
-----
-----
}
所以,正如你所看到的,參數x在它被用作方法參數後被聲明。這在G ++中引發了一個明顯的編譯錯誤。
那麼,哪個C編譯器支持這個?
這是舊式K & R格式。它實際上並沒有宣佈參數x
,而是定義了它的類型。默認情況下,除非另有說明,東西都是int
。
回到C語言簡單得多,離我心愛的BCPL不遠的地方,這就是你給函數參數的類型。這些原創的東西都不是你年輕的鞭策者理所當然的。
噢,下車我的草坪:-)
這是任何聲明正常運行C編譯器必須接受它的C.函數的參數類型的原始的方式。但是,在C++中是不允許的,所以每個運行正常的C++編譯器都必須拒絕它(儘管在這兩種情況下,請注意可能需要某些特定的編譯器標誌組合才能實現正確的功能)。曾幾何時,C編譯器只有接受這種風格,並會拒絕代碼,如:float absolute_value(float x) {}
。當C被標準化時,這被添加了(與函數原型一起)。
它也不允許在C99中使用。 – dan04 2010-08-02 06:30:56
@ dan04:並非如此。根據§6.11.7「過時特徵」,它仍然是允許的(根據§6.9.1/ 7):「函數定義中的聲明符指定了被定義函數的名稱和參數的標識符。如果聲明符包含一個參數類型列表,該列表還指定了所有參數的類型; [...]「 – 2010-08-02 07:01:45
這意味着我有一本非常非常老的書,適合老年人;) – zengr 2010-08-02 06:27:35
是的,你真的這麼做。即使是K&R本身(白色聖經)在1990年更新爲使用適當的功能原型。我不介意被稱爲oldie。老年和背叛在很多方面擊敗年輕人和技能:-) – paxdiablo 2010-08-02 06:30:28
我同意父親:) – zengr 2010-08-02 06:32:10