通過C 的外部依賴項的感悟

2021-08-18 08:20:39 字數 1328 閱讀 7546

外部依賴性在這裡(其實很容易被忽略)!但是由它可以看到許多隱藏的東西!

它能說明什麼問題?

看右邊程式源**中直接使用system("pause");

而學過c語言的小夥伴們應該都曉得,要使用這個函式,必須要引入stdlib.h,即:

#include

但是這裡為什麼不引入,就可以使用了呢?

其實並沒有違背「函式呼叫時候必須要有函式體的支撐」這個客觀規律。只是它被隱藏了。就在這裡:

不感覺奇怪嗎?已經被引入進來了!但是自己並沒有包含它啊,這就是「檔案依賴」而導致的結果。

其實寫不同的程式會用到不同的函式,也就需要包含不同的檔案。但此時,如果該檔案中的**又需要其他檔案先被載入,就產生了依賴(這在linux中編譯軟體的時候經常看到,那是軟體依賴,因此才有yum安裝軟體方式的出現)

我們先看看不同程式的依賴檔案列表:

1:這裡不引入任何檔案,所以那個「外部依賴項」目錄是空的。

現在改為:

編譯之後,可以看到依賴目錄裡有stdio.h,同時還牽扯出要讓stdio.h裡面的**正常執行的其他依賴檔案。所以有一大堆。

繼續改為:

可見,你手工包含的stdio.h,stdlib.h都被引入了,同時還引入了其他依賴檔案。

再改為:

開啟之後看:

可見,檔名它可以取.h字尾的,也可以取沒有任何字尾的,都是個檔案,它自己打的開就行,同時也是和c語言裡面的標頭檔案區別開來,能一眼就知道是c++特有特性的檔案。

可見,雖然你只引入iostream檔案,但是它需要其他的依賴檔案,這樣就把stdio.h,stdlib.h給引入進來了。

所以你可以直接使用system("pause");

試著開啟iostream這個檔案:

可見,這個檔案裡面確實包含了istream,才引進來。

同時可以看到string.h也被包含進來了,就是c語言裡面的那種處理字串的用法。所以後續c++裡不想用這個string.h裡面的東西了,就需要另外引入string檔案,才能使用string型別(因為該string檔案沒有被包含進來,所以才要自己包含)。

注意:

由於檔案之間的包含和依賴很多很細,還隨機穿插,所以列出了個列表出來方便檢視,它其實沒有這個義務的,所以讓你在編譯之後才列出了給你看都已經是好的了,所以要求不要太高。所以:記住在編譯之後再看。如果沒列出了,重新關閉軟體,重新開啟編譯程式,就可以看到了。為什麼會這樣?因為它只有編譯的時候才知道要依賴什麼,而當時已經把相關的**拿走放到編譯結果的可執行檔案去了,這個軟體的這個地方只是給你個回饋資訊,所以滯後甚至不給你列出了給你看,也是可以的。所以如果沒列出了,那就重新關閉軟體,重新編譯執行一下就看到了(反正我測試的時候是這種效果)。

java依賴的外部檔案路徑的獲取

在開發階段一直使用以下方式除錯沒有問題 string path kstream104.class.getresource getfile tostring file database new file path constants.geoipfile 但是,打包編譯後,放到linux環境下,發現報空...

android 依賴外部庫的編譯方法

如果我們需要用到第三方提供的動態庫,需要先使用預編譯,把第三方的動態庫安裝到libs目錄,然後在需要呼叫的檔案的android.mk裡使用 local shared libraries 來鏈結這些動態庫。實施步驟 1.在jni下新建乙個資料夾,把第三方動態庫放進去,並新增android.mk,形如以...

WPF中的依賴項屬性

已經學習了好幾天了,乙個小例子讓我豁然開朗,以下是我個人的一點理解 由於wpf由xaml檔案和c 檔案組成的,c 負責邏輯處理,所以很多控制項屬性就會別修改,此時我們希望他能夠反映到介面上,依賴項屬性就能夠做到這點。當然系統的控制項的一般的屬性都是依賴性的,我們不必擔心,但在資料繫結的時候,我們會經...