C C 避免標頭檔案重複包含的方法

2022-09-10 06:00:09 字數 1427 閱讀 2669

在實際的程式設計過程中,因為會使用多個檔案,所以在檔案中不可避免的要引入一些標頭檔案,這樣就可能會出現乙個標頭檔案被include多次,在c/c++中有幾種不同的方式可以解決這個問題,總體功能相差不大,但依然存在細微差別。

格式如下:

#ifndef __complex__

#define __complex__

//標頭檔案主體

#endif

或者

#ifndef __complex_h__

#define __complex_h__

//標頭檔案主體

#endif

作用:相同的兩個檔案不會被重複包含。

優點:

受c/c++語言標準的支援,不受編譯器的限制。

不僅僅侷限於避免同乙個檔案被重複包含,也能避免內容完全相同的兩個檔案(或**片段)被重複包含。

缺點:

如果不同標頭檔案中的巨集名恰好相同,可能就會導致你看到標頭檔案明明存在,編譯器卻說找不到宣告的情況。

由於編譯器每次都需要開啟標頭檔案才能判定是否有重複定義,因此在編譯大型專案時,#ifndef會使得編譯時間相對較長。

格式如下:

#pragma once//標頭檔案主體

作用:物理上的同乙個檔案不會被重複包含。

優點:

避免#ifndef中因為巨集名相同導致的問題。

由於編譯器不需要開啟標頭檔案就能判定是否有重複定義,因此在編譯大型專案時,比#ifndef更快。

缺點:

#pragma once只針對同一檔案有效,對相同的兩個檔案(或**片段)使用無效。

#pragma once不受一些較老版本的編譯器支援,一些支援了的編譯器又打算去掉它,所以它的相容性可能不夠好。

格式如下:

#pragma once

#ifndef __complex_h__

#define __complex_h__

//標頭檔案主體

#endif

混合使用需要注意的是:

1.只要使用了#ifndef就會有巨集名衝突的危險。

2.混合使用無法避免不支援#pragma once的編譯器報錯。

所以混合使用並不一定能得到很好的效果,具體怎麼使用,需要視情況而定。

C 避免重複包含標頭檔案方法

為了避免同乙個標頭檔案被包含 include 多次,c c 中有兩種巨集實現方式 一種是 ifndef方式 另一種是 pragma once方式。在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別。但兩者仍然有一些細微的區別。方式一 ifndefsomefile h definesomefile ...

避免變數重複定義和重複包含標頭檔案的方法

重複包含的影響 在預處理對時候,include相同的檔案,預處理器會檢查 是否有定義再決定要不要複製內容,重複包含會是編譯器多檢查幾次而已。另外在使用增量編譯的時候,這個檔案變化,所有 include 這個檔案的檔案都需要重新編譯,即使沒有去使用裡面的任何內容。避免方法 1.把頭檔案放在巨集裡 if...

C C中防止標頭檔案被重複包含的方法

原部落格鏈結 為了避免同乙個檔案被include多次,c c 中有兩種方式,一種是 ifndef方式,一種是 pragma once方式。在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。方式一 ifndef somefile h 或寫為 if define s...