6
我々はこのような複数の変数を宣言することができた場合:各仮引数のデータ型を個別に指定する必要があるのはなぜですか?
int i, j, k;
を私は仮引数で書くときに、なぜ私はエラーが出るん:
void fun(int i, j, k)
の代わり:
void fun(int i, int j, int k)
我々はこのような複数の変数を宣言することができた場合:各仮引数のデータ型を個別に指定する必要があるのはなぜですか?
int i, j, k;
を私は仮引数で書くときに、なぜ私はエラーが出るん:
void fun(int i, j, k)
の代わり:
void fun(int i, int j, int k)
これは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)
{
}
言語仕様のためです。 – sehe
プロトタイプのないCの先史時的な振る舞いと、C++による設計上の決定により、あなたが提案する構文を許可しないためです。また、現在の関数定義 'void f1(int i1、int i2、double d1、double d2)'を仮定すると、バリアント構文でどのように記述しますか? 'void f1(int i1、i2; double d1、d2)'?または、セミコロンを置いたカンマを使用しますか?または、他の何か? –
最初の行は* 3つの変数を宣言します。正しい類推は 'int a = 1、* b =&a、foo(char、char);' –