欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言詳細分析講解多文件的程序設計

 更新時間:2022年04月21日 10:14:27   作者:清風自在?流水潺潺  
所謂的C語言多文件編程就是,將代碼實現(xiàn)模塊化。比如說一個項目的一項功能放在一個一個文件里,然后將實現(xiàn)這個功能的函數(shù)放在一個c文件<BR>

一、多文件與編譯器鏈接

如下圖所示,.o 為目標文件,鏈接器將不同的目標文件裝配組合在一起形成一個可執(zhí)行文件。

二、多文件之間的相互訪問

每個文件可以定義功能接口(可被其它文件訪問的函數(shù)或數(shù)據(jù))

  • 源文件:代碼實現(xiàn)文件,后綴為.c
  • 頭文件:源文件的接口定義文件,后綴為.h

當需要使用其它文件提供的功能時,包含對應的頭文件

語法:

#include <hearer.h>

#include "header.h"

三、關于#include

#include 用于聲明使用其它文件的功能(頭文件可看作工具包)

#include <...>

在編譯系統(tǒng)文件中查找頭文件

#include "..."

先查找當前工程文件夾,再查找編譯統(tǒng)文件夾

四、頭文件使用的一些原則

  • 頭文件中只做函數(shù)聲明和變量聲明(不做具體定義)
  • 頭文件中可定義數(shù)據(jù)類型(typedef, struct, union, enum)
  • 根據(jù)具體實現(xiàn),一個頭文件可對應多個源文件(多數(shù)情況一對一)
  • 不要使用#include語句包含源文件

五、再論全局變量

普通全局變量

  • 源文件中定義的全局變量可在所有其它源文件中使用
  • 可使用 extern 關鍵字在頭文件中進行聲明,并在其它文件使用

靜態(tài)全局變量

  • static 修飾的全局變量只能在當前源文件中使用
  • 無法通過 extern 關鍵字聲明,在其它文件使用

六、注意事項

函數(shù)聲明語句默認自帶 extern 關鍵字修飾

類型定義必須在頭文件中,僅類型聲明無法創(chuàng)建變量

靜態(tài)全局變量

  • 生命期為程序運行期
  • 作用域僅在定義的文件中
  • 無法直接在其它文件中使用

static 關鍵字可使函數(shù)具備文件作用域(靜態(tài)函數(shù))

靜態(tài)函數(shù)無法在其它文件中被調(diào)用

函數(shù)設計時需要考慮是否在其它文件中使用

七、實驗程序

以CodeBlcoks為例,先建好 main.c 文件之后,點擊File,New,再點擊File,選擇 Empty file,分別建一個 .h 和 .c 文件,完成多文件創(chuàng)建。

opm.h 代碼:

struct Test
{
    int a;
    int b;
};
extern int g_var;   // 聲明全局變量時,不需要給出初始值
extern int f_var;
int add(int a, int b);
int mul(int, int);   // 進行函數(shù)聲明的時候,可以省略參數(shù)名
extern void test();

opm.c 代碼:

#include <stdio.h>
int g_var = 1;
static int f_var = 2;   // 只能在當前文件中使用 ==> 靜態(tài)全局變量
static void func()  // 靜態(tài)函數(shù)只能在當前文件中被調(diào)用
{
    printf("void func() : f_var = %d\n", f_var);
}
void test()   // 當前文件中定義的所有函數(shù)都可以調(diào)用 func() 函數(shù)
{
    func();
}
int add(int a, int b)
{
    return a + b;
}
int mul(int a, int b)
{
    return a * b;
}

main.c 代碼:

#include <stdio.h>
#include <string.h>
#include "opm.h"
int main()
{
    struct Test t = {1, 2};
    printf("a + b = %d\n", add(t.a, t.b));
    printf("a * b = %d\n", mul(t.a, t.b));
    printf("g_var = %d\n", g_var);
    // printf("f_var = %d\n", f_var);   // 無法直接使用其他文件中定義的靜態(tài)全局變量
    test();
    return 0;
}

下面為輸出結果:

通過這個多文件程序,說明一個問題:

static 修飾的全局變量和函數(shù)只能在當前源文件中使用,所以 func() 函數(shù)不能再 main 函數(shù)中調(diào)用,而 test() 函數(shù)可以在 main 函數(shù)中被調(diào)用。

八、小結

  • 實際工程開發(fā)中,多文件程序設計是常態(tài)
  • 源文件實現(xiàn)具體功能,頭文件聲明接口
  • #include 用于聲明需要使用其它文件中定義的功能
  • extern關鍵字用于函數(shù)和全局變量的聲明
  • static 關鍵字修飾的全局變量不能在其它文件中使用

到此這篇關于C語言詳細分析講解多文件的程序設計的文章就介紹到這了,更多相關C語言 多文件程序設計內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Qt數(shù)據(jù)庫應用之實現(xiàn)通用數(shù)據(jù)庫請求

    Qt數(shù)據(jù)庫應用之實現(xiàn)通用數(shù)據(jù)庫請求

    這篇文章主要為大家介紹了Qt中是如何實現(xiàn)通用數(shù)據(jù)庫請求的,文中的示例代碼講解詳細,對我們學習Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C/C++經(jīng)典楊輝三角問題解決方案

    C/C++經(jīng)典楊輝三角問題解決方案

    楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形,它的排列形如三角形。本文將為大家介紹通過C++/C語言實現(xiàn)打印楊輝三角形的示例代碼,需要的可以參考一下
    2023-02-02
  • C 語言常用方法技巧

    C 語言常用方法技巧

    本文主要介紹了C語言常用方法技巧。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • QT出現(xiàn)沒有MySQL驅動手動編譯詳細步驟

    QT出現(xiàn)沒有MySQL驅動手動編譯詳細步驟

    這篇文章主要給大家介紹了關于QT出現(xiàn)沒有MySQL驅動手動編譯詳細步驟的相關資料,文中通過圖文介紹的非常詳細,對大家學習或者使用QT具有一定的參考學習價值,需要的朋友可以參考下
    2023-04-04
  • Qt?QDateTime計算時間差的實現(xiàn)示例

    Qt?QDateTime計算時間差的實現(xiàn)示例

    本文主要介紹了Qt?QDateTime計算時間差的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • C語言中的const和free用法詳解

    C語言中的const和free用法詳解

    C語言中的const和C++中的const是有區(qū)別的,而且在使用VS編譯測試的時候,如果是C的話,請一定要建立一個后綴為C的文件,不要是CPP的文件。因為,兩個編譯器會有差別的。下面通過本文給大家分享C語言中的const和free用法,感興趣的朋友一起看看吧
    2017-04-04
  • C++中引用、內(nèi)聯(lián)函數(shù)、auto關鍵字和范圍for循環(huán)詳解

    C++中引用、內(nèi)聯(lián)函數(shù)、auto關鍵字和范圍for循環(huán)詳解

    本文主要梳理了C++當中一些瑣碎的知識點,包括有命名空間,缺省參數(shù),引用,auto關鍵字和內(nèi)聯(lián)函數(shù),文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-02-02
  • OpenCV實現(xiàn)可分離濾波

    OpenCV實現(xiàn)可分離濾波

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)可分離濾波,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++代碼實現(xiàn)五子棋小游戲

    C++代碼實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了C++代碼實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++ vector容器縮小capacity問題

    C++ vector容器縮小capacity問題

    這篇文章主要介紹了C++ vector容器縮小capacity問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論