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

C++程序中添加.c.h的實(shí)現(xiàn)方法

 更新時(shí)間:2023年08月01日 10:11:32   作者:zxz520zmg  
這篇文章主要介紹了C++程序中添加.c.h的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++程序中添加.c.h的方法

 方法一

 1、把要添加的.c和.h文件復(fù)制到c++程序目錄中。  

 2、把.c文件改為.cpp文件  

 3、把.c.h文件都添加到該項(xiàng)目中 就可以使用了 

方法二

 1、項(xiàng)目配置不使用預(yù)編譯頭  

2、.c文件加載到程序需中 

 3、把c語言函數(shù)的聲明用extern "C"{};中。  

現(xiàn)在最好的寫法是:  

?//test.h?
?#ifdef __cplusplus?
?extern "C" {?
?#endif?
?//c語言函數(shù)聲明寫在這?
?#ifdef __cplusplus?
?}?
?#endif?
? //test.c?
? //.c開頭出?
?#ifdef __cplusplus?
?extern "C" {?
?#endif?
?#include "test.h"?
?//.c文件內(nèi)容?
?#ifdef __cplusplus?
?}?
?#endif?
?//.c文件結(jié)束?

C/C++中的.h和.c文件

編譯器的工作過程

涉及到的函數(shù)、結(jié)構(gòu)體、變量等比較多。通常,編寫c/c++項(xiàng)目的方式是,有一個(gè)main.c文件,該文件的main函數(shù)作為接口,調(diào)用其他函數(shù)。所有其他函數(shù)按功能,分別放在不同的.h文件中,這樣的方式在編譯和運(yùn)行上肯定是沒有什么問題的。

隨著項(xiàng)目編寫的深入,結(jié)構(gòu)、邏輯以及變量的日趨復(fù)雜,總感覺上述方式的實(shí)現(xiàn)仍然不夠清晰并且會(huì)導(dǎo)致一些冗余。忽然記起,在課堂上,老師提到過,.h文件一般用來存放函數(shù)聲明和變量名,那么為什么我在.h文件中實(shí)現(xiàn)函數(shù)不會(huì)有問題呢?其他.c文件和main.c文件又有什么關(guān)系呢?這些,都使我不得不重新思考.h文件和.c文件的作用和關(guān)系。

.h文件的由來和弊端

要理清.h文件的作用,我們不妨看看.h文件的由來:

“在編譯器只認(rèn)識.c(.cpp))文件,而不知道.h是何物的年代,那時(shí)的人們寫了很多的.c(.cpp)文件,漸漸地,人們發(fā)現(xiàn)在很多.c(.cpp)文件中的聲明語句就是相同的,但他們卻不得不一個(gè)字一個(gè)字地重復(fù)地將這些內(nèi)容敲入每個(gè).c(.cpp)文件。但更為恐怖的是,當(dāng)其中一個(gè)聲明有變更時(shí),就需要檢查所有的.c(.cpp)文件。

于是人們將重復(fù)的部分提取出來,放在一個(gè)新文件里,然后在需要的.c(.cpp)文件中敲入#include XXXX這樣的語句。這樣即使某個(gè)聲明發(fā)生了變更,也再不需要到處尋找與修改了。因?yàn)檫@個(gè)新文件,經(jīng)常被放在.c(.cpp)文件的頭部,所以就給它起名叫做“頭文件”,擴(kuò)展名是.h。

在我們語言的初學(xué)階段,往往我們的程序只有一個(gè).c的文件或這很少的幾個(gè),這時(shí)我們就很少遇到頭文件組織這個(gè)頭疼的問題,隨著我們程序的增加,代碼 量到了幾千行甚至幾萬行,文件數(shù)也越來越多。這時(shí)這些文件的組織就成了一個(gè)問題,其實(shí)說白了這些文件的組織問題從理論上來說是軟件工程中的模塊設(shè)計(jì)等等的問題。”(引自c語言項(xiàng)目中.h文件和.c文件的關(guān)系)

由上可以看出,.h文件最初就是用來給變量和函數(shù)提供一些全局性的聲明,這些聲明被其他.c文件共享,方便變量和聲明的修改,使得大型代碼邏輯更清晰更易于維護(hù)。因此.h文件中一般是聲明,很少有代碼的具體實(shí)現(xiàn)。

h文件在編譯原理

那么為什么在.h文件中實(shí)現(xiàn)函數(shù)也不會(huì)出錯(cuò)呢?在.h文件中實(shí)現(xiàn)函數(shù)與在.c文件中實(shí)現(xiàn)函數(shù)有什么區(qū)別和聯(lián)系呢?普通的.C文件和包含main函數(shù)的c文件有什么區(qū)別和聯(lián)系呢?

要解決上述問題,首先必須弄清編譯器的工作原理。編譯器的最終目的是將程序員編寫的源代碼轉(zhuǎn)換成機(jī)器能夠識別運(yùn)行的二進(jìn)制機(jī)器碼。

大體上分,可以分為4個(gè)步驟:

1.頭文件的預(yù)編譯,預(yù)處理

  • 編譯器在編譯源代碼時(shí),會(huì)先編譯頭文件,保證每個(gè)頭文件只被編譯一次。
  • 在預(yù)處理階段,編譯器將c文件中引用的頭文件中的內(nèi)容全部寫到c文件中。

2.詞法和語法分析(查錯(cuò))

3.編譯(匯編代碼,.obj文件)

  • 轉(zhuǎn)化為匯編碼,這種文件稱為目標(biāo)文件。后綴為.obj。

4.鏈接(二進(jìn)制機(jī)器碼,.exe文件)

  • 將匯編代碼轉(zhuǎn)換為機(jī)器碼,生成可執(zhí)行文件。
  • 更詳細(xì)具體的流程可參考編譯器的工作過程
  • 在編譯過程中,.h文件中的所有內(nèi)容會(huì)被寫到包含它的.c文件中,而所有的.c文件以一個(gè)共同的main函數(shù)作為可執(zhí)行程序的入口。
  • 因此,在.h文件中編寫函數(shù)實(shí)現(xiàn)并不會(huì)出錯(cuò),相當(dāng)于所有.h的內(nèi)容最后都被寫到了main.c文件中。
  • 但是為了邏輯性、易于維護(hù)性以及一些其他目的(可參考c語言中.h文件和.c文件的解析),一般在.h文件中寫函數(shù)的聲明,在.c文件中編寫函數(shù)的實(shí)現(xiàn)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++Lambda表達(dá)式詳解

    C++Lambda表達(dá)式詳解

    這篇文章主要介紹了C++中的Lambda表達(dá)式詳解,本文講解了基本語法、Lambda的使用等內(nèi)容,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C語言實(shí)現(xiàn)的猜數(shù)字小游戲

    C語言實(shí)現(xiàn)的猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)的猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 好用的C++ string Format“函數(shù)”介紹

    好用的C++ string Format“函數(shù)”介紹

    大家好,本篇文章主要講的是好用的C++ string Format“函數(shù)”介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Qt實(shí)現(xiàn)右擊菜單項(xiàng)

    Qt實(shí)現(xiàn)右擊菜單項(xiàng)

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)右擊菜單項(xiàng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++中與輸入相關(guān)的istream類成員函數(shù)簡介

    C++中與輸入相關(guān)的istream類成員函數(shù)簡介

    這篇文章主要介紹了C++中與輸入相關(guān)的istream類成員函數(shù)簡介,包括eof函數(shù)和peek函數(shù)以及putback函數(shù)還有ignore函數(shù),需要的朋友可以參考下
    2015-09-09
  • C語言文件操作詳解以及詳細(xì)步驟

    C語言文件操作詳解以及詳細(xì)步驟

    文件(file)一般指存儲在外部介質(zhì)上數(shù)據(jù)的集合,比如我們經(jīng)常使用的.txt,?.bmp,?jpg.?.exe,.rmvb等等,下面這篇文章主要給大家介紹了關(guān)于C語言文件操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • C++實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的二分查找

    C++實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的二分查找

    這篇文章主要介紹了C++實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的二分查找方法,涉及數(shù)組的操作,有值得借鑒的技巧,需要的朋友可以參考下
    2014-09-09
  • C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請求的示例代碼

    C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請求的示例代碼

    HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本的協(xié)議,它是一種無狀態(tài)的、應(yīng)用層的協(xié)議,用于在計(jì)算機(jī)之間傳輸超文本文檔,通常在 Web 瀏覽器和 Web 服務(wù)器之間進(jìn)行數(shù)據(jù)通信,本文給大家介紹了C/C++發(fā)送與接收HTTP/S請求,需要的朋友可以參考下
    2023-11-11
  • opencv3/C++輪廓的提取與篩選方式

    opencv3/C++輪廓的提取與篩選方式

    今天小編就為大家分享一篇opencv3/C++輪廓的提取與篩選方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C語言鏈表實(shí)現(xiàn)簡易通訊錄

    C語言鏈表實(shí)現(xiàn)簡易通訊錄

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)簡易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論