宣言と定義の違い


宣言は、コンピュータに名前を紹介し、コンピュータという名前がどういう意味かを教え、定義はこの名前にストレージスペースを割り当てることです.
変数にかかわらず、関数にかかわらず、それらの意味は同じです.
いずれの場合も、コンパイラは定義にストレージスペースを割り当てます.
変数の場合、コンパイラは、この変数がどれだけのストレージ領域を占めるかを決定し、メモリに格納された領域を生成します.
関数の場合、コンパイラはコードを生成し、ストレージスペースを割り当てます.関数の記憶領域に使用される
パラメータテーブルまたはアドレスオペレータを持たない関数名によって生成されるポインタ.
定義は宣言でもよく、コンパイラが名前Aを見たことがなく、プログラマがintAを定義している場合は定義です.
また、コンパイラはすぐにこの名前にストレージスペースを割り当てます.
宣言は常にexternキーワードを使用します.定義ではなく変数を宣言する場合は、externを使用する必要があります.
関数の宣言の場合、externキーワードはオプションで、パラメータテーブルと戻り値とともに関数体を持たない関数名が自動的に宣言されます.
関数の宣言と定義では、パラメータ名を指定しても指定してもかまいません.
/*: declare.cpp */

extern int i;	// 
extern float f(float);	// 

float b;	// 

float f(float a) {		// 
	return a + 1.0;
}


int i;		// 
int h(int x) {		// 
	return x + 1;
}

int main() {
	b = 1.0;
	i = 2;
	f(b);
	h(i);
	
	return 0;
}