2010-08-02 73 views
1

我在Stephen G Kochan的書中發現了這個代碼,Programming in c。這可能嗎?函數參數聲明問題來自C程序員Stephen Kochan

float absolute_value(x) 
float x; 
{ 
    ----- 
    ----- 
} 

所以,正如你所看到的,參數x在它被用作方法參數後被聲明。這在G ++中引發了一個明顯的編譯錯誤。

那麼,哪個C編譯器支持這個?

回答

3

這是舊式K & R格式。它實際上並沒有宣佈參數x,而是定義了它的類型。默認情況下,除非另有說明,東西都是int

回到C語言簡單得多,離我心愛的BCPL不遠的地方,這就是你給函數參數的類型。這些原創的東西都不是你年輕的鞭策者理所當然的。

噢,下車我的草坪:-)

+0

這意味着我有一本非常非常老的書,適合老年人;) – zengr 2010-08-02 06:27:35

+0

是的,你真的這麼做。即使是K&R本身(白色聖經)在1990年更新爲使用適當的功能原型。我不介意被稱爲oldie。老年和背叛在很多方面擊敗年輕人和技能:-) – paxdiablo 2010-08-02 06:30:28

+0

我同意父親:) – zengr 2010-08-02 06:32:10

1

這是任何聲明正常運行C編譯器必須接受它的C.函數的參數類型的原始的方式。但是,在C++中是不允許的,所以每個運行正常的C++編譯器都必須拒絕它(儘管在這兩種情況下,請注意可能需要某些特定的編譯器標誌組合才能實現正確的功能)。曾幾何時,C編譯器只有接受這種風格,並會拒絕代碼,如:float absolute_value(float x) {}。當C被標準化時,這被添加了(與函數原型一起)。

+0

它也不允許在C99中使用。 – dan04 2010-08-02 06:30:56

+0

@ dan04:並非如此。根據§6.11.7「過時特徵」,它仍然是允許的(根據§6.9.1/ 7):「函數定義中的聲明符指定了被定義函數的名稱和參數的標識符。如果聲明符包含一個參數類型列表,該列表還指定了所有參數的類型; [...]「 – 2010-08-02 07:01:45