C語言大程序結構

原文鏈接:https://www.icourse163.org/learn/ZJU-200001?tid=416005#/learn/content?type=detail&id=770044&cid=820112&replay=true

在一個項目下的多個c文件可以關聯使用比如:

  • main.c文件:
#include<stdio.h>

int max(a,b);

int main()
{
    int a=5;
    int b=6;
    printf("%d\n",max(a,b);
}
  • max.c文件:
double max(double a,double b)
{
    return a+b;
}

在運行時兩個文件都不會編譯錯誤,但會運行錯誤,因爲其變量類型聲明是不同的。

解決問題的方法是把max函數原型放到頭文件(.h)中,在需要max是去引用他:

  • max.h文件:
int max(int a,int b);

並在main.c及,max.c中引用max.h:

#include "max.h"

再次運行,編譯器可以發現max.c中的類型錯誤,編譯器能知道max的原型是什麼。max.h內的代碼插入到include行進行編譯。

  • 自己寫的頭文件以雙引號include,編譯時會先從當前目錄找該頭文件,然後從系統找,尖括號直接從系統找

其實stiod.h等頭文件中並沒有函數的源代碼,而只有該函數的原型。

  • 好的編程習慣是,把除了main.c的.c文件都寫一個對應的.h聲明其原型,全局變量的聲明也寫入.h,可以在多個.c文件間共享,比如:
//max.c文件下
int gAll=12;
...

//max.h文件下
extern int gAll;

//main.c下

int main()
{
    a=1;
    max(a,gAll);
    return 0;
}
  • 如果在函數前加static,那麼該函數只能在這個.c文件中使用
  • 定義和聲明不同,聲明無具體代碼內容(比如宏聲明,函數原型,結構聲明等),而定義(函數定義,變量)有。
  • 只有聲明可以放在頭文件中
  • 同一編譯單元不要有同名聲明,爲了避免頭文件重複定義,則一般寫作標準頭文件格式:
#ifndef _MAX_H_
#define _MAX_H_

double max(double a, double b);
extern in gAll

#endif

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章