C語言多個源文件編譯


多源文件編譯:

新建一個 main.c

 

#include <stdio.h>
#include <stdlib.h>

int main(){    
    int i = myMax(20,40);
    printf("i = %d",i);
    system("pause");
    return 0;
}

 

然后再創建一個 a.c

 

int myMax(int a,int b) {
    if(a>b)
        return a;
    return b;
}

 

然后編譯

如果不是 visual studio C++ 的環境的話,會報錯的。所以我用了dev C++就報了錯。

錯誤信息:

8 21 F:\c++codeInDev\多源文件編譯\main.c [Error] 'myMax' was not declared in this scope

說 myMax 沒這個函數。

 

所以 需要一個 函數的聲明。

main.c 代碼:

 

#include <stdio.h>
#include <stdlib.h>

int myMax(int a,int b);

int main(){
    
    int i = myMax(20,40);
    printf("i = %d",i);
    system("pause");
    return 0;
    
}

 

第二種寫法——采用加載頭文件的方式:

main.c 代碼:

 

#include <iostream>
#include "a.h"
int main() {
    printf("較大的數字是:%d\n",myMax(20,30));
    return 0;
}

 

a.h代碼:

 

int myMax(int a,int b);

a.c 代碼:

 

int myMax(int a,int b){
    if(a>b)
        return a;
    return b;
}

 

擴展:

main.c代碼

 

#include <iostream>
#include "a.h" 
#include "b.h"
int main() {
    printf("較大的數字是:%d\n",myMax(20,40));
    printf("兩數之和是:%d\n",myAdd(20,50));
    return 0;
}

 

a.c代碼:

 

int myMax(int a,int b){
    if(a>b)
    return a;
    return b;
}

 

a.h 代碼:

 

int myMax(int a,int b){
    if(a>b)
    return a;
    return b;
}

 

b.h 代碼:

 

int myAdd(int a, int b);

 

b.c 代碼:

int myAdd(int a, int b){
    return a+b;
}

運行結果示例:

馬上要引出一個 別的事兒:

dev竟然不可以復制文件夾,估計有什么隱含設置。。。在 android里面 和 javaweb里面都有這么一個東西的。android太久不弄有點兒忘記了,在 javaweb里面,選中一個項目,摁住alt+Enter,然后 搜索 web。然后再修改這個 項目的名稱,否則當前復制的項目會覆蓋之前的那個項目。在發布之后】

那就在 這個 上面改吧。。。

 

如果 b.h 里面包含了 a.h 那么會出現什么樣的狀況呢?

修改后的b.h:

 

#include "a.h"
int myAdd(int a, int b);

 

好吧,竟然沒有問題。

但是 理論上這樣多包含了一個 int myMax(int a,int b);就相當於重復的聲明在main.c了照理說是不可以的。

所以誕生了 #ifndef #define #endif

所以把程序 寫成這樣:

 

好吧 就是 想引入這個 如果 沒有定義的話,就定義 這樣一個 概念。

示例代碼://我們可以學着照抄人家的代碼,人家的這種.h 文件基本上都是這樣做的。完后看基本上都是 #endif 結尾的

 

修改的部分:

 

a.h 代碼:

 

#ifndef _AH
#define _AH
int myMax(int a,int b);
#endif

 

b.h 代碼:

 

#ifndef _BH
#define _BH
int myAdd(int a, int b);
#endif

 

這是 原來本身c語言里面提供的類庫文件的書寫格式,下面截了個圖

可以看到人家也是這么操作的。

相關描述:

extern c++特有的!聲明這段東西要以,C的方式編譯。用在 dll的書寫上,dll這個 東西真的是很神奇。是動態加載的類庫文件。這種動態加載是在程序運行的時候,把當前這個 exe文件和exe所需要的dll文件一起在內存中開辟一塊空間。所以這樣就導致exe做出來可以很小。但是對於靜態的lib來說。需要一起打包在exe文件中,這樣exe就很大。並且每次改動都需要重新編譯exe文件。但是對於dll的話,只需要重新編譯這一部分,然后把dll放到對應目錄下面,就可以了。並且,通常情況下,高級語言開發上層,邏輯部分很迅速。但是用c就很乏力,但是對於某些必須要操作硬件的部分就只能使用C開發好dll,然后可以讓java等上層語言進行調用。這樣的語言除了java還有 C++python等等.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM