在這一章中我們來學習一下關於函式的定義與使用。關於函式的概念我們可以這樣理解,函式是一個功能的集合,它可以根據輸入完成特寫的功能,並將結果輸出。當然有時候函式只是為了實現一些特寫功能而並不一定要有輸入或輸入。我們想要自己編寫一個函式需要編寫兩部分內容:宣告和定義。函式的宣告就是告訴編譯器我們想要定義一個函式,並明確規定其返回值(輸出)、函式名、引數表(輸入)。宣告函式的語法如下:

                type function_name(type var);

        下面我們來看幾個宣告函式的例子:

int max(int a, int b);  //返回兩個變數中值較大的值。
float sum(float a, float b, float c);  //返回三個變數a、b、c的和。
printf(char *fmt, ...);  //按格式顯示

        注意,關於printf函式中fmt引數後面的...表示這個函式可以接收不定個數的引數。關於這種不定引數型別的函式我們將在後續章節中學習。

        對函式做出了宣告之後,就可以定義函式的實現功能了,實現函式功能時,函式的名稱,返回值,引數表必須要與此函式宣告時一致。下面我們來實現上面前兩個函式:

int max(int a, int b)
{
	if (a < b)
	{
		return b;
	}
	return a;
}

float sum(float a, float b, float c)
{
	return a + b + c;
}

        定義好了函式內容我們就可以來使用這兩個函數了。下面我們來編寫程式呼叫這兩個函式:

#include <stdio.h>

int max(int a, int b);
float sum(float a, float b, float c);

int main(int argc, char *argv[])
{
	int a = 1, b = 2;
	float c = 2.3, d = 3.4, e = 4.5;
	int f = max(a, b);
	float g = sum(c, d, e);
	printf("%d %f\n", f, g);

	return 0;
}

int max(int a, int b)
{
	if (a < b)
	{
		return b;
	}
	return a;
}

float sum(float a, float b, float c)
{
	return a + b + c;
}

        當一個函式的定義在呼叫這個函式之前時,可以不用宣告這個函式。例如:

#include <stdio.h>

int max(int a, int b)
{
	if (a < b)
	{
		return b;
	}
	return a;
}

float sum(float a, float b, float c)
{
	return a + b + c;
}

int main(int argc, char *argv[])
{
	int a = 1, b = 2;
	float c = 2.3, d = 3.4, e = 4.5;
	int f = max(a, b);
	float g = sum(c, d, e);
	printf("%d %f\n", f, g);

	return 0;
}

        但是我們通常編寫的函式往往會提供給很多程式來呼叫,而且在函式內部往往也要呼叫其它函式。如果不對函式做宣告的話,多個相互呼叫的函式將無法通過編譯器編譯,也就無法使用,所以還是建議讀者在編寫函式時先對函式做宣告。

歡迎關注公眾號:程式設計外星人