函數(shù)是C語言的基本構(gòu)件,要成為一個(gè)優(yōu)秀的程序員,必須很好地掌握函數(shù)的編寫方法和使用方法。本章將集中討論與函數(shù)有關(guān)的問題,例如什么時(shí)候說明函數(shù),怎樣說明函數(shù),使用函數(shù)的種種技巧,等等。
在閱讀本章時(shí),請回憶你曾編寫過的函數(shù),看看你是否已盡可能提高了這些函數(shù)的效率;如果沒有,請應(yīng)用本章所介紹的一些技術(shù),以提高你的程序的速度和效率。此外,請注意本章所介紹的一些實(shí)用編程技巧,其中的一些例子能有效地幫助你提高編寫函數(shù)的技能。
8. 1 什么時(shí)候說明函數(shù)?
只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件。例如,如果函數(shù)stat_func()只在源文件stat.c中使用,應(yīng)該這樣說明:
/* stat.c */
# include
atatic int atat_func(int,int); /* atatic declaration of atat-funcO */
void main (void);
viod main (void)
{
......
rc=stat_func(1,2);
......
}
/* definition (body) of stat-funcO */
static int stat-funcdnt argl,int arg2)
{
return rc;
}
在上例中,函數(shù)stat_func()只在源文件stat.c中使用,因此它的原型(或說明)在源文件stat.c以外是不可見的,為了避免與其它源文件中可能出現(xiàn)的同名函數(shù)發(fā)生沖突,應(yīng)該將其說明為內(nèi)部函數(shù)。
在下例中,函數(shù)glob_func()在源文件global.c中定義和使用,并且還要在源文件extern,c中使用,因此應(yīng)該在一個(gè)頭文件(本例中為proto.h)中說明,而源文件global.c和extern.c
中都應(yīng)包含這個(gè)頭文件。
File: proto.h
/* proto.h */
int glob_func(int,int); /* declaration of the glob-funcO function * /
File: global. c
/* global. c */
# include
# include "proto. h" /*include this file for the declaration of
glob_func() */
viod main(void);
viod main (void)
{
rc_glob_func(l,2);
}
/* deHnition (body) of the glob-funcO function */
int glob_func(int argl,int arg2)
{
return rc;
}
File extern. c
/* extin.c */
# include
# include "proto. h" /*include thia file for the declaration of
glob_func() */
void ext_func(void);
void ext_func(void)
{
/* call glob_func(), which ia deHncd in the global, c source file * /
rc=glob_func(10,20);
}
在上例中,在頭文件proto.h中說明了函數(shù)glob_func(),因此,只要任意一個(gè)源文件包含了該頭文件,該源文件就包含了對函數(shù)glob_func()的說明,這樣編譯程序就能檢查在該源文件中g(shù)lob_func()函數(shù)的參數(shù)和返回值是否符合要求。請注意,包含頭文件的語句總是出現(xiàn)在源文件中第一條說明函數(shù)的語句之前。
請參見;
8.2 為什么要說明函數(shù)原型?
8.3 一個(gè)函數(shù)可以有多少個(gè)參數(shù)?
8.4 什么是內(nèi)部函數(shù)?
8.2 為什么要說明函數(shù)原型?
在閱讀本章時(shí),請回憶你曾編寫過的函數(shù),看看你是否已盡可能提高了這些函數(shù)的效率;如果沒有,請應(yīng)用本章所介紹的一些技術(shù),以提高你的程序的速度和效率。此外,請注意本章所介紹的一些實(shí)用編程技巧,其中的一些例子能有效地幫助你提高編寫函數(shù)的技能。
8. 1 什么時(shí)候說明函數(shù)?
只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件。例如,如果函數(shù)stat_func()只在源文件stat.c中使用,應(yīng)該這樣說明:
/* stat.c */
# include
atatic int atat_func(int,int); /* atatic declaration of atat-funcO */
void main (void);
viod main (void)
{
......
rc=stat_func(1,2);
......
}
/* definition (body) of stat-funcO */
static int stat-funcdnt argl,int arg2)
{
return rc;
}
在上例中,函數(shù)stat_func()只在源文件stat.c中使用,因此它的原型(或說明)在源文件stat.c以外是不可見的,為了避免與其它源文件中可能出現(xiàn)的同名函數(shù)發(fā)生沖突,應(yīng)該將其說明為內(nèi)部函數(shù)。
在下例中,函數(shù)glob_func()在源文件global.c中定義和使用,并且還要在源文件extern,c中使用,因此應(yīng)該在一個(gè)頭文件(本例中為proto.h)中說明,而源文件global.c和extern.c
中都應(yīng)包含這個(gè)頭文件。
File: proto.h
/* proto.h */
int glob_func(int,int); /* declaration of the glob-funcO function * /
File: global. c
/* global. c */
# include
# include "proto. h" /*include this file for the declaration of
glob_func() */
viod main(void);
viod main (void)
{
rc_glob_func(l,2);
}
/* deHnition (body) of the glob-funcO function */
int glob_func(int argl,int arg2)
{
return rc;
}
File extern. c
/* extin.c */
# include
# include "proto. h" /*include thia file for the declaration of
glob_func() */
void ext_func(void);
void ext_func(void)
{
/* call glob_func(), which ia deHncd in the global, c source file * /
rc=glob_func(10,20);
}
在上例中,在頭文件proto.h中說明了函數(shù)glob_func(),因此,只要任意一個(gè)源文件包含了該頭文件,該源文件就包含了對函數(shù)glob_func()的說明,這樣編譯程序就能檢查在該源文件中g(shù)lob_func()函數(shù)的參數(shù)和返回值是否符合要求。請注意,包含頭文件的語句總是出現(xiàn)在源文件中第一條說明函數(shù)的語句之前。
請參見;
8.2 為什么要說明函數(shù)原型?
8.3 一個(gè)函數(shù)可以有多少個(gè)參數(shù)?
8.4 什么是內(nèi)部函數(shù)?
8.2 為什么要說明函數(shù)原型?