包含庫(kù)頭文件注意事項(xiàng)

字號(hào):

考試大今天,就給大家說一說使用頭文件得注意的地方.
    給大家一個(gè)例子吧:
    #include
    #define BUFSIZ 128
    int main(void)
    {
    return 0;
    }
    編譯一下,給現(xiàn)了一個(gè)警告:
    Compiling D:\TURBOC2\NONAME.C:
    Warning D:\TURBOC2\NONAME.C 2: Redefinition of ’BUFSIZ’ is not identical
    examda提示: 原來是在stdio.h頭文件中也宏定義了BUFSIZ.
    因此,我們?cè)谑褂煤陼r(shí),不能和頭文件中定義的宏相同.這點(diǎn)值得大家注意.
    還有頭文件中的函數(shù)也得注意,我們選用的函數(shù)名也不能和頭文件中的函數(shù)名相同.
    看一看下面的例子:
    #include
    char unlink(void);
    int main(void)
    {
    return 0;
    }
    char unlink(void)
    {
    }
    編譯一下,出現(xiàn)了二個(gè)錯(cuò)誤:
    Error D:\TURBOC2\NONAME.C 2: Type mismatch in redeclaration of ’unlink’
    Error D:\TURBOC2\NONAME.C 8: Type mismatch in redeclaration of ’unlink’
    由于stdio.h中有int _Cdecl unlink (const char *path);的聲明,
    而你又使用unlink作為函數(shù)名,出現(xiàn)了重名.編譯器會(huì)把代碼中的出現(xiàn)unlink函數(shù)
    看作是unlink()的定義,因此,就出現(xiàn)的重定義函數(shù)時(shí)的參數(shù)類型不對(duì).
    但我把上出的代碼改一下:
    #include
    int unlink(const char* path)
    {
    printf("%s",path);
    }
    int main(void)
    {
    unlink("OK?");
    return 0;
    }
    編譯一下,沒有出現(xiàn)錯(cuò)誤,再鏈接一下,也沒有出現(xiàn)錯(cuò)誤.
    結(jié)果:
    OK?
    也就是說,鏈接器并沒有鏈接庫(kù)函數(shù)unlink().
    說明鏈接器不是把所的頭文件中的庫(kù)函數(shù)都鏈接,而是把代碼中使用到的庫(kù)函數(shù)鏈接.
    而代碼使用的unlink()在代碼中已經(jīng)定義了,所以鏈接器并不鏈接unlink()庫(kù)函數(shù).
    所以這樣做問題是沒有,但也得注意一下,這樣做是不是妥當(dāng).