2013-07-21 10 views
6

我々はこのような複数の変数を宣言することができた場合:各仮引数のデータ型を個別に指定する必要があるのはなぜですか?

int i, j, k; 

を私は仮引数で書くときに、なぜ私はエラーが出るん:

void fun(int i, j, k) 

の代わり:

void fun(int i, int j, int k) 
+24

言語仕様のためです。 – sehe

+5

プロトタイプのないCの先史時的な振る舞いと、C++による設計上の決定により、あなたが提案する構文を許可しないためです。また、現在の関数定義 'void f1(int i1、int i2、double d1、double d2)'を仮定すると、バリアント構文でどのように記述しますか? 'void f1(int i1、i2; double d1、d2)'?または、セミコロンを置いたカンマを使用しますか?または、他の何か? –

+1

最初の行は* 3つの変数を宣言します。正しい類推は 'int a = 1、* b =&a、foo(char、char);' –

答えて

16

これはC構文の仕組みではないためです。パラメータの宣言は、変数宣言とはいくつかの点で異なります。

void fun(int i, double x); 

int i, double x;   // syntax error 

構文がによって許可されているあなたがしようとしたフォーム(、例えば、そのfunc fun(i, j, k int)に行くように拡張されている可能性が、標準委員会はこれを実行しないことに決めました、おそらくそれはまだ下位互換性のためにANSI C89/ISO C90でサポートされていた古いスタイル(「K & R」、プレ1989)パラメータの構文の顔に混乱を招くことになるので。

void fun(i, j) // K&R syntax: implicitly int i, int j 
{ 
} 

void fun(i, p) 
    int *p;  // int i implicit! 
{ 
} 

// What's this? double i? double *i? Mixed K&R/ANSI syntax with implicit int i? 
void fun(double *x, i) 
{ 
} 
関連する問題