ifndef誰能詳細解說下, ifndef的用法

2022-03-19 21:48:49 字數 5310 閱讀 4586

1樓:匿名使用者

#include

// a header file utility.h

#ifndef utility

#define utility

int fibonacci(int x);

#endif

// you can include this header file twice or more

#ifndef utility

#define utility

int fibonacci(int x);

#endif

int main()

// the code of fibonacci function may probably be in utility.cpp

int fibonacci(int x)

else if (x == 1)  else

}他們說的基本都是對的,這樣做可以防止重複引入標頭檔案,如**中的第二段引入的fibonacci函式的宣告就跳過了,因為utility已經被define了。我這裡給了乙個例子,你可以試一試。不明白再解釋。

通常檔案結構是不在一起的,如這個例子,可以分為:main.cpp,utility.h,utility.cpp。

2樓:

#ifndef __head__ 意思就是如果沒有定義__head__ 的巨集

#define __head__

**區。。。

#endif

//常用的地方是防止標頭檔案被重複引用 第一次引用標頭檔案進入#ifndef __head__ ,沒有定義__head__ 巨集 然後進入#define __head__ ,下次再引用就定義了__head__

3樓:匿名使用者

最常見的用法是防止重複編譯同乙個標頭檔案……

請大家幫我詳細解釋下這個的程式的每一句。尤其是#ifndef這個用法

4樓:匿名使用者

#ifndef date //判斷是否預定義識別符號date,沒有的話執行下面語句

#define date //預定義識別符號date#include

class date;

void date::display()

if(m==2) daylimit = isleapyear(y) ? 29 : 28;

return (d>daylimit)? false : true;

}bool date::isleapyear(int y)#endif //條件編譯結束,實際上這個是用在自定義的標頭檔案裡面的,防止原始檔不止乙個時出現類的重複定義或者函式重複申明等問題

#ifndef的用法 30

5樓:學生那點事

#ifndef都是一種巨集定義判斷,作用是防止多重定義。

#ifndef是if not define的簡寫。

一般的使用場景為:  1)、標頭檔案中使用,防止標頭檔案被多重呼叫2)、作為測試使用,省去注釋**的麻煩3)、作為不同角色或者場景的判斷使用。

頭件的中的#ifndef,這是乙個很關鍵的東西。比如你有兩個c檔案,這兩個c檔案都include了同乙個標頭檔案。而編譯時,這兩個c檔案要一同編譯成乙個可執行檔案,於是問題來了,大量的宣告衝突。

還是把頭檔案的內容都放在#ifndef和#endif中吧。不管你的標頭檔案會不會被多個檔案引用,你都要加上這個。一般格式是這樣的:

#ifndef 《標識》

#define 《標識》 ......

#endif

6樓:關鍵他是我孫子

#ifndef是巨集定義裡面的一種,用來防止防止標頭檔案的重複包含和編譯。

比如你有兩個c檔案,這兩個c檔案都include了同乙個標頭檔案。而編譯時,這兩個c檔案要一同編譯成乙個可執行檔案,於是問題來了,大量的宣告衝突。

如果把頭檔案的內容都放在#ifndef和#endif中,不管你的標頭檔案會不會被多個檔案引用,你都要加上這個,就可以避免衝突的問題。

#ifndef可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等等.實際上確切的說這應該是預處理功能中三種(巨集定義,檔案包含和條件編譯)中的一種——條件編譯。 c語言在對程式進行編譯時,會先根據預處理命令進行「預處理」。

c語言編譯系統包括預處理,編譯和鏈結等部分。

7樓:綠意如煙

#ifndef起到的效果是防止乙個原始檔兩次包含同乙個標頭檔案,而不是防止兩個源...

8樓:匿名使用者

好的情況下翻譯過來就可以用。

9樓:匿名使用者

用#pragma once

啊,你那種用法已經過時了。

#ifndef是什麼?

10樓:blackpink_羅捷

#ifndef是"if not defined"的簡寫,是巨集定義的一種,它是可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等。

實際上確切的說這應該是預處理功能中三種(巨集定義,檔案包含和條件編譯)中的第三種——條件編譯。

作用:

條件指示符#ifndef的最主要目的是防止標頭檔案的重複包含和編譯。

條件編譯當然也可以用條件語句來實現, 但是用條件語句將會對整個源程式進行編譯,生成的目標**程式很長,而採用條件編譯,則根據條件只編譯其中的程式段1或程式段2,生成的目標程式較短。如果條件選擇的程式段很長,採用條件編譯的方法是十分必要的。

11樓:鐵牛騎士

我補充一下

#表明是預處理命令

ifndef意為if not defined sth.

它與ifdef都可用於條件編譯

即#ifdef 識別符號a

程式段1

#else

程式段2

#endif

意為若所指定的識別符號a已經被#define命令定義過則編譯程式段1,否則編譯程式段2

同理#ifndef 識別符號b

程式段1

#else

程式段2

#endif

意為若所指定的識別符號b未被#define命令定義過則編譯程式段1,否則編譯程式段2

12樓:

這是巨集定義的一種,它可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等等

比如#define x

#ifndef x

do something

#endif

#ifndef和#define放在c++程式的開頭具體是什麼意思?

13樓:匿名使用者

符號常量

比如#define size 5

然後在程式段中就能用size替代5 有助於程式的縮放

c++ #ifndef,ifndef和#define,#endif?有何用

14樓:

巨集命令,他們類似條件語句。

#ifndef -- 如果沒有定義什麼東西#define -- 則定義某東西

#endif -- 巨集 條件語句結束符號

巨集 條件語句 在程式編譯的第一階段執行。執行完,再編譯c,c++程式部分。

15樓:喵喵隊摸大魚

這是預處理命令

#ifndef _head_h //就是如果沒有定義巨集_head_h

#define _head_h //那麼就定義巨集_head_h//新增你的標頭檔案內容

#endif //結束if還有類似的#ifdef #undefine可以從字面意思理解。

加上以上的巨集是未了防止標頭檔案被重複引用,當編譯器第一次編譯標頭檔案的時候,會定義_head_h,然後如果還有檔案引用了該標頭檔案,但_head_h已經被定義了,所以就不會在去編譯你的標頭檔案新增的內容。

這個就是條件編譯

誰能詳細解釋一下c++中的null的意思

16樓:小貓爬樹

未知數,沒有確定值,可以理解為空,但並不等於零,很抽象的!

17樓:火駒

null是c語言發明的東西,在c裡面null就是0,這樣說很明白吧

在c++裡面null仍然有效,但不再是0,0就是0,null就是null,通常很少使用null了,null表示當前指標沒有指向任何位置,即允許不指向特定位置的指標存在且合法

18樓:

null 是常數(巨集定義常數),用來表示 「沒有東西」這個東西。

預設數值 ascii碼 0x00

例如 stdio.h 定義 null 是 0 或指標 0:

/* define null pointer value 巨集定義常數 */

#ifndef null

#ifdef __cplusplus

#define null 0

#else

#define null ((void *)0)#endif

#endif

#ifdef或#ifndef的使用

19樓:匿名使用者

#ifndef headfilename

#define headfilename

//以下為標頭檔案內容

...#endif //標頭檔案末

20樓:匿名使用者

:#if #ifdef和#ifndef的綜合應用。

1. 程式分析:

2.程式源**:

#include "stdio.h"

#define max

#define maximum(x,y) (x>y)?x:y#define minimum(x,y) (x>y)?y:xvoid main()

c++中#ifndef的含義

21樓:只死你

定義成空的唄

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

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

以上回答你滿意麼?

給我解說下雙顯示卡的利與弊詳細點

我來說說。nvdia的雙卡互聯是sli ati的是cross fire 互聯原理 crossfire採用專用主卡搭配普通顯示卡的方式,訊號傳遞通過專用連線線 sli系統需要兩塊完全一樣的支援sli的顯示卡,訊號通過積體電路聯結器。顯示卡搭配 crossfire不要求兩塊顯示卡完全一樣,不同品牌 不同...

戰國蘭斯裡希露是怎麼死?誰能詳細說下

希露沒死好不好,戰蘭正史線因為來水美樹的魔王之力暴走被冰封了而已。希露是魔法師之女被奴隸商人拐走施加了絕對服從魔法轉賣給了蘭斯。名義上是主僕關係,但實際上純潔的戀愛關係 主要蘭斯自己傲嬌不肯承認 希露後來自己解開了魔法也沒有走,戰蘭之後的蘭斯8,9都是講蘭斯去尋找解開冰封的方法的故事。9的最後解開了...

誰能說下劍三少林t內防多少合格,誰能說下劍三少林T內防多少合格?

一身差不多就55 了 一是你的硬碟你的硬碟應該是不夠用了,系統盤是多大啊?分以下區。二就是記憶體條小了,估計你是二代條子800hz的應該是最高的了。別弄低的條子,用低的速度一樣上不來只就低的用 qhl沒去過 不過問過乙個t過的 御勁要上15左右才比較好 11御勁的boss乙個會心10w 的血掉下去 ...