C語言輔導(dǎo):解答之函數(shù)

字號:

函數(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ù)原型?