避免同乙個檔案被include多次

2021-05-28 03:14:21 字數 632 閱讀 4913

1 #ifndef方式

2 #pragma once方式

在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。

方式一:

#ifndef __somefile_h__

#define __somefile_h__

... ... // 一些宣告語句

#endif

方式二:

#pragma once

... ... // 一些宣告語句

#ifndef的方式依賴於巨集名字不能衝突,這不光可以保證同乙個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。當然,缺點就是如果不同標頭檔案的巨集名不小心「撞車」,可能就會導致標頭檔案明明存在,編譯器卻硬說找不到宣告的狀況

#pragma once則由編譯器提供保證:同乙個檔案不會被包含多次。注意這裡所說的「同乙個檔案」是指物理上的乙個檔案,而不是指內容相同的兩個檔案。帶來的好處是,你不必再費勁想個巨集名了,當然也就不會出現巨集名碰撞引發的奇怪問題。對應的缺點就是如果某個標頭檔案有多份拷貝,本方法不能保證他們不被重複包含。當然,相比巨集名碰撞引發的「找不到宣告」的問題,重複包含更容易被發現並修正。

方式一由語言支援所以移植性好,方式二 可以避免名字衝突

避免同乙個檔案被include多次

我們知道c 有時會遇到防止標頭檔案重複include問題,常用的方式可以防止.h檔案重複include 的方式為 if defined.define.但是在有些地方發現了這段 if msc ver 1000 pragma once endif msc ver 1000 查了一下也是防止重複inclu...

讀寫同乙個檔案出問題

在c primer plus 第六版中的第十三章程式設計練習第3題出現了問題。題目 編寫乙個檔案拷貝程式,提示使用者輸入文字檔案名,並以該檔名作為源檔名和輸出檔名。該程式要使用ctype.h中的toupper 函式,在寫入到輸出檔案時把所有文字轉換成大寫。使用標準的i o和文字模式。我一開始就只建立...

被同乙個男人拋棄3次的女人

首先,我先闡明立場,我不是笑話別人,也不是在洩露什麼秘密。因為,這件事在我們學校已經是人人皆知,我只是想通過這件事來談談自己的看法。魏某 男 和王某 女 是我們這的語文教師,剛畢業是的時候是大學裡的一對戀人,所以,學校一起把他們招來了,在這裡教高中語文。第一年,一對小戀人就領了結婚證書,而且都當班主...