天天看點

C語言項目中頭檔案/代碼檔案的組織問題(使用VC6.0)

個人備忘:

1.建立一個文本檔案命名為main.c,使用VC6.0打開并編譯,VC6.0會在目前檔案夾下自動建立“工作區間”和“工程”檔案,如:main.dsw,main.dsp等;然後就可以在“工程”下建立或添加你的.c和.h檔案。

2.消滅頭檔案被多次include導緻的錯誤。在每個頭檔案中加上如下的定義:(假設頭檔案的名字為MyDemo.h)

#ifndef MY_DEMO_H

#define MY_DEMO_H

//...

#endif // MY_DEMO_H

3.檔案字尾名不要混用.cpp,隻使用.c/.h。如果是使用VC6直接建立的C++項目,建議字尾名統一用.cpp,總之不要混用。

4.頭檔案中一般隻包含必要的全局類型/變量定義和函數接口定義。關于函數接口定義,要思考清楚哪些函數是要提供給其它子產品使用的,哪些是本子產品内部使用的,隻需把對外的(供外部子產品使用的)函數接口定義在頭檔案中即可。不對外公開的函數,可用static定義之。

5.一個完整代碼示例:

main.c

#include "stdio.h"

#include "myfun1.h"

#include "myfun2.h"

void main()

{

    //加減法測試

    test_add_minus(9, 2);

    //乘除法測試

    test_multiply_divide(9, 3);

    printf("Please Press [Enter] to Exit..\n\n");

    getchar();

}

myfun1.h

#ifndef _MYFUN1_H

#define _MYFUN1_H

//加減法測試

void test_add_minus();

#endif

myfun1.c

//加法

static int add(int a, int b)

    return (a+b);

//減法

static int minus(int a, int b)

    return (a-b);

void test_add_minus(int a, int b)

    int m = add(a, b);

    int n = minus(a, b); 

    printf("a+b=%d\n\n", m);

    printf("a-b=%d\n\n", n);

myfun2.h

#ifndef _MYFUN2_H

#define _MYFUN2_H

//乘除法測試

void test_multiply_divide(int a, int b);

myfun2.c

//乘法

static int multiply(int a, int b)

    return (a*b);

//除法

static int divide(int a, int b)

    return (a/b);

void test_multiply_divide(int a, int b)

    int m = multiply(a, b);

    int n = divide(a, b); 

    printf("a*b=%d\n\n", m);

    printf("a/b=%d\n\n", n);

6.頭檔案應是函數功能子產品的組織,就像面向對象程式設計中的一個類的定義一樣。為避免代碼檔案過大,函數功能又能有效組織,可以将多個代碼檔案對應一個頭檔案。這裡還是要從功能組織去思考,或者說從函數接口的組織去思考,頭檔案應是将相似的功能函數定義在一起,便于查找或梳理相似功能的函數。這時,與單個頭檔案對應的多個代碼檔案很像C#語言中的分部類定義,呵呵。7中是對5中的代碼改進後的完整示例。

7.一個完整代碼示例(多個代碼檔案對應一個頭檔案):

#include "myfun.h"

myfun.h

#ifndef _MYFUN_H

#define _MYFUN_H