C 標頭檔案中pragma once和ifndef之類的

2022-12-20 09:31:05 字數 4372 閱讀 9117

1樓:奧麥地道

「為什麼編譯器不自己限制對一個檔案只包含一次」:

因為對同一個檔案包含兩次可能是部分**需要,我就在一個比較成熟的專案裡面看到過 對一個標頭檔案包含兩次的,大致原理如下:

標頭檔案f.h裡面 有兩部分,分別被 macro_a 和macro_b包括著,

在g.c裡面某個地方,先定義了macro_a,然後include f.h,接著undef macro_b

在後面某個地方 又定義了macro_b,然後include f.h,再接著undef macro_b

c語言標頭檔案避免重複包含,pragma once和#ifndef的區別

2樓:李廣英

#pragma once 和 #ifndef在c++中都能使用。

#pragma once好像不在c中使用吧?!#ifndef可以在c中使用。

#pragma once的用法:在.h中最前面寫上就行。

#ifndef的用法:

#ifndef _my_h_

#define _my_h_

//標頭檔案內容

#endif

3樓:匿名使用者

pragma 是微軟的!

#ifndef是世界的

c++標頭檔案中 #ifndef是什麼意思?

4樓:匿名使用者

定義成空的唄

這就是個小技巧, 為了防止兩次include同一個標頭檔案。

第一次include的時候由於 ns_telnet_h沒定義,所以巨集裡面的內容(也就是標頭檔案的全部內容了) 會被編譯。 而第二次include它的時候由於 ns_telnet_h已經被定義,所以巨集裡面的內容不會被編譯。 這個巨集沒define成任何有意義的東西,是因為實際上只是需要ns_telnet_h存在就可以,它的內容無所謂

c++中#pragma once和#define是幹什麼用的

5樓:好多小幸福

這是一個比較常用的c/c++雜注,只要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次。

#pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。

#ifndef,#define,#endif是c/c++語言中的巨集定義,通過巨集定義避免檔案多次編譯。所以在所有支援c++語言的編譯器上都是有效的,如果寫的程式要跨平臺,最好使用這種方式

c++ 標頭檔案中加入 #ifnodef #define #engif 有什麼用

6樓:帝釋天參

你說的是c語言中的巨集定義,也是預編譯指令

首先,你對巨集定義的書寫有誤,#ifnodef應該是#ifndef,#engif應該是#endif

接下來我們說說這幾個巨集定義的用法

#define:這個巨集定義就是使用一個命名來替代另一個。比如#define age 5

那麼,在程式中,填入age,在預編譯的時候,編譯器就會自動將age替換成5,注意,這個是直接替換,所以如果#define x 3+1,那麼在程式中輸入5*x,編譯器就會將其替換成5*3+1,這種情況一般會這樣定義#define x (3+1)

#ifdef、#ifndef、#endif:一般#ifdef/#ifndef和#endif是成對出現的。

#ifdef顧名思義,就是如果定義了某個巨集。比如

#ifdef age //如果之前有#define age value(這個是age對應的值),就執行下面的語句

//do something

#endif //執行語句到這裡結束

#ifndef與#ifdef正相反,直譯是if not define,就是如果沒有定義某個巨集,就執行if內的語句。如:

#ifndef age //如果之前沒有#define age value(這個是age對應的值),就執行下面的語句

//do something

#endif //執行語句到這裡結束

7樓:倒黴熊

你這裡寫的單詞不對吧如果我沒記錯的話

應該是#ifndef

#define

#endif

不加也沒有什麼問題,簡單程式來說不會報錯的,但複雜程式就可能會產生問題了。

這主要用來解決 標頭檔案重複包含問題,防止出現重複定義的錯誤。

8樓:匿名使用者

如果不加,多次引用時,會造成重複定義變數啥的

標頭檔案中主要是定義一些公共的變數(全域性)或類的宣告與實現

如果在不知道的情況下,標頭檔案間相互引用 就會造成重複引用 ,導致出錯

9樓:依稀紅顏落

這個是預編譯命令。http://baike.

具體應用來說,我知道的,多平臺遊戲引擎會通過這些命令分別編譯對應平臺的資源。

c++中program once有什麼作用

10樓:仙戈雅

#pragma once  指令是讓編譯器只包一次該檔案。這樣就不會出現重複包含檔案的現象。類似於#if...這些巨集定義。

11樓:盧幼綦德容

這是一個比較常用的c/c++雜注,只要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次。就這樣用就行了。沒有結束,不過是對當前標頭檔案來說的,出了這個檔案就管不了了。

12樓:匿名使用者

防止該標頭檔案被多次 #include

標頭檔案中的 ifndef/define/endif 幹什麼用?

13樓:

#ifndef、#define、#endif為c語言的3條預處理語句,主要用作條件編譯。先介紹一下條件編譯:

一般情況下,源**檔案中的所有行都參加編譯,但有時需要指定一部分**在某個條件下才被編譯,這就叫做條件編譯。

條件編譯發生在預處理階段,在c中,主要通過#if、#elif、#else、#ifdef、#ifndef、#endif來給一段**附加上編譯條件,然後前處理器收集滿足條件的可以進行編譯的**,這樣經過預處理,不滿足條件的**就不會被編譯。

這3個預處理語句的功能分別為:

#ifndef symbol

語句塊#endif

如果沒有定義符號symbol,那麼就編譯下面指定的語句塊,用endif來表示條件編譯語句的結尾。

#define symbol

定義一個符號symbol。

這三個預處理語句用在一起可以解決標頭檔案被重複引用的問題:一個.c源程式中可能引用了多個標頭檔案,而被源程式引用的標頭檔案又有可能存在引用關係,比如a.

h引用了b.h,然後在源程式中同時引用a.h和b.

h,就會產生這個問題,這時編譯器會產生符號重定義之類的錯誤。為了防止該問題,就需要在標頭檔案中加入以下語句:

#ifndef symbol

#define symbol

標頭檔案包含的內容

#endif

這樣即可防止該標頭檔案被重複引用。symbol一般採取以下方式命名:_標頭檔案名_h,當然也可採取其他方式。

另外,對於有的編譯器也可以在標頭檔案中加入#pragma once來防止標頭檔案被重複引用

14樓:樓飇回驪娟

在一個大的軟體工程裡面,可能會有多個檔案同時包含一個標頭檔案,當這些檔案編譯連結成一個可執行檔案時,就會出現大量「重定義」的錯誤。在標頭檔案中實用#ifndef

#define

#endif能避免標頭檔案的重定義。

方法:例如要編寫標頭檔案test.h

在標頭檔案開頭寫上兩行:

#ifndef

_test_h

#define

_test_h//一般是檔名的大寫

標頭檔案結尾寫上一行:

#endif

這樣一個工程檔案裡同時包含兩個test.h時,就不會出現重定義的錯誤了。分析:

當第一次包含test.h時,由於沒有定義_test_h,條件為真,這樣就會包含(執行)#ifndef

_test_h和#endif之間的**,當第二次包含test.h時前面一次已經定義了_test_h,條件為假,#ifndef

_test_h和#endif之間的**也就不會再次被包含,這樣就避免了重定義了。

15樓:

1樓 說得不錯 頂了

C 的標頭檔案宣告與使用問題,c 在標頭檔案中宣告一個類,但是在主函式定義該類的變數時卻出錯了。怎麼回事?

每個c 標頭檔案都會有對應的函式庫相支援,一般ide編譯器 會完成這個處理,如果回沒有,則需要開發者自己答增加相應的函式庫。函式庫中有標頭檔案中的函式的具體實現內容。如果是自定義的函式和標頭檔案,則需要開發者自己完成相應的函式與實現了。標準e68a8462616964757a686964616f31...

C語言標頭檔案是什麼,c語言中的標頭檔案是什麼概念

標頭檔案是你程式中需要用到東西,如需要某個數學函式,則必須包括數學相關標頭檔案,如math.h,當然,也可以自己寫函式,只要你不怕麻煩!標頭檔案是你程式中需要用到東西,如需要某個數學函式,則必須包括數學相關標頭檔案,如math.h,當然,也可以自己寫函式,只要你不怕麻煩!標頭檔案就是在你所編制的程式...

C裡標頭檔案和原始檔

在vs2012中,c 還是有.h頭問價和.cpp原始檔 但在c 中,只有.cs檔案,可以理解為標頭檔案 原檔案都在cs檔案中,需要引用的話,引用相應的名稱空間即可。首先,新增 一個c 的應用程式,如果要在c 中呼叫c 的dll檔案,先要在c 的類中新增一個靜態方法,並且使用dllimportattr...