2010-12-07 15 views
5

重複の可能性:
C variable declarations after function heading in definition
What is useful about this C syntax?これは奇妙なCの構文ですか?

私はいくつかのCコードを理解しようとすると変数は、関数の先頭と最初のブレースの間に宣言されている場合、この出くわしました。

これらの変数は何ですか?
ローカルでもグローバルでもありますか?

ここでは何をするつもりですか?

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

これは実際には関数のパラメータの型を宣言するのオリジナルな方法です。詳細を読むためにK&Rのコピーを手に入れてください。 – linuxuser27

+2

http://stackoverflow.com/questions/1630631/what-is-useful-about-this-c-syntaxを参照してください。 – kennytm

答えて

7

これらは関数の引数です。これを宣言する別の方法です。彼らは通常の引数と同じように動作します。かなり長いが、非常に有益な説明については

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

+0

これらは廃止されました(または完全に削除されましたか?私は忘れています)。最新バージョンの標準。 –

+0

おそらく。私はこの答えにそれを含めることができたので、それを見つけることができなかったので、それをGoogleにしようとしました。 – terminus

+0

「doublereal」はC#でその型に相当するものはありますか?それとも今はdoubleを使用できますか? –

3

これらの変数は、引数の宣言されている参照してください。誰もがなぜそのスタイルを使用しているのか分かりません。これらの型はtypedefでなければなりません。

これは古いレガシーコードの場合、実際には無効なキーワードが存在しましたか?

+0

その15yr +古いコード –

+0

それはそれを説明します。私はvoidキーワードで少し混乱していましたが、古いコンパイラもサポートしているようです。 – onemasse

2

これはRスタイルの宣言であり、C言語が30年前に書かれた方法です(それでもC99ではサポートされていますが、C1xでは削除されると考えています)。タイプの見た目からは、コードはFortranから変換された可能性が高いので、オリジナルの長さを知ることができます。

voidの存在のため、厳密なオリジナルK & Rではありません。次のようになり、「現代」Cでは

、:

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! –