2010-12-07 28 views
5

Olası çoğaltmaları:
C variable declarations after function heading in definition
What is useful about this C syntax?Bu garip C sözdizimi bu mu?

Bazı C kodu anlamaya çalışan ve değişkenler fonksiyonun kafası ve birinci destek arasındaki Burada, bildirilen bu rastladı.

Bu değişkenlerin ne olduğu hakkında bir fikrin var mı?
Yerel mi yoksa global mi?

Yazar burada ne yapmak niyetinde?

void someFunction (m_ptr, n_ptr, params, err) 
      integer *m_ptr;  /* pointer to number of points to fit */ 
      integer *n_ptr;  /* pointer to number of parameters */ 
      doublereal *params;  /* vector of parameters */ 
      doublereal *err;  /* vector of error from data */ 
     { 
      //some variables declared here 
      int  i; 
      ... 
      ... 

      //body of the function here 

     } 
+5

: gibi "modern" C'de

, o görünürdü. Ayrıntıları okumak için K & R'ın bir kopyasını alın. – linuxuser27

+2

Bkz. Http://stackoverflow.com/questions/1630631/what-is-useful-about-this-c-syntax – kennytm

cevap

7

Bunlar işlev bağımsız değişkenleridir. Bu onları bildirmenin alternatif bir yoludur. Normal argümanlar gibi çalışırlar. oldukça uzun ama çok bilgilendirici açıklama için

Alternative (K&R) C syntax for function declaration versus prototypes

+0

Ve standartların en son sürümünde (veya tamamen kaldırıldı mı?) . –

+0

Muhtemelen. Google'a denedim, böylece bu cevaba ekleyebilirdim, ancak onları bulamadım. – terminus

+0

"doublereal" ile ilgili olarak C# 'da bu tür için herhangi bir eşdeğer var mı, yoksa şimdilik sadece çift kullanabilir miyim? –

3

olanlar değişkenler bağımsız değişkenler beyan görüyorum. Kimsenin neden bu stili kullanabileceğinden emin değil. Bu tipler typedef olsa.

Bu eski bir eski kodsa, gerçekten o zaman anahtar kelime olarak gerçekten var mıydı?

+0

Onun 15yr + eski kod –

+0

Bunu açıklar. Boş anahtar kelime ile biraz kafam karışmıştı, ama büyük derleyiciler de bunu destekliyordu. Konunun tarihçesi için – onemasse

2

Bu bir K & R stili bildirimi ve 30 yıl önce C'nin yazıldığı yazışmadır (hala desteklenmektedir, ancak C99'da kullanımdan kaldırılmıştır; C1x'te kaldırılacağına inanıyorum). Türlerin görünüşünden, kod muhtemelen Fortran'dan dönüştürüldü, bu yüzden orijinalin kaç yaşında olduğunu kim bilebilir? Ancak, void varlığından ötürü, orijinal K & R orijinal sert değildir. Bu aslında işlev parametre tipleri bildirimi orijinal yoludur

void someFunction (integer *m_ptr, integer *n_ptr, 
        doublereal *params, doublereal *err) 
{ 
    //some variables declared here 
    int  i; 
    ... 
    ... 

    //body of the function here 
} 
+0

+1! –