亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2023年08月01日 10:11:32   作者:zxz520zmg  
這篇文章主要介紹了C++程序中添加.c.h的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(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語(yǔ)言函數(shù)的聲明用extern "C"{};中。  

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

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

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

編譯器的工作過(guò)程

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

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

.h文件的由來(lái)和弊端

要理清.h文件的作用,我們不妨看看.h文件的由來(lái):

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

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

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

由上可以看出,.h文件最初就是用來(lái)給變量和函數(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)系呢?

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

    大家好,本篇文章主要講的是好用的C++ string Format“函數(shù)”介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    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類(lèi)成員函數(shù)簡(jiǎn)介

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

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

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

    文件(file)一般指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合,比如我們經(jīng)常使用的.txt,?.bmp,?jpg.?.exe,.rmvb等等,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言文件操作的相關(guān)資料,文中通過(guò)實(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請(qǐng)求的示例代碼

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

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

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

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

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

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

最新評(píng)論