為什麼要用ifndef,標頭檔案為什麼要加 ifndef define endif

2022-03-15 17:21:28 字數 1864 閱讀 3219

1樓:匿名使用者

#include指令的缺陷,導致同一個標頭檔案會被多次引入,使用ifndef可以避免多次引入。

例如一個程式中包含如下檔案:dialog.cpp dialog.h network.cpp network.h log.cpp log.h

dialog.cpp中include了network.h和log.

hnetwork.h中也include了log.h這樣dialog.

cpp中實際上引入了兩次log.h。

在編譯的時候,編譯器會因為log.h中的函式被定義了兩次而報錯。

使用ifndef就會避免這個問題。

如果用vc編譯器,也可以不使用ifndef,改用#pragma once預編譯指令就可以了。

標頭檔案為什麼要加#ifndef #define #endif

標頭檔案為什麼要加#ifndef #define #endif

2樓:閃忠六衣

ifndef和endif是一對條件預編譯語句,給你一個例子:

ifndef

abc;//意思是如果沒有定義abc這個特徵符,則編譯之後到endif之前的語句否則略過

//define

abc;這條語句;

define

abc;

endif;

比如有一段**,有時需要根據需要不進行編譯或進行編譯,如以下**:

ifdef

abc;

某段**;

endif;

意思就是如果程式中定義了abc特徵符,則編譯這裡所說的"某段**」,否則不進行編譯,

如果程式是這樣:

ifndef

abc;

define

abc;

endif;

ifdef

abc;

某段**;

endif;

則這裡所說的「某段**」肯定會被編譯,因為在設計程式之初,可能需要根據某個條件來決定是否編譯「某段**」,但是後來發現,這樣的條件編譯已經沒有必要,而且必須要編譯「某段**」,兩種辦法,一種是把ifdef

abc和endif;去掉;另一種就像這裡一樣,在ifdef

abc;

某段**;

endif;

之前加ifndef

abc;

define

abc;

endif;

#ifndef 後面的標頭檔案名為什麼要大寫

3樓:匿名使用者

一般是要大寫的,變數一般是小寫的。主要是為了便於區別。

c++程式設計中:#ifndef _test_h 後面這個test_h為什麼是大寫?

4樓:迷途的笨小孩

test.h是標頭檔案的名字,這裡是_test_h是預處理變數,就是在編譯標頭檔案之前檢測該變數是否定義過,如果未定義則編譯標頭檔案**,主要是為了防止標頭檔案的多重包含,一般大寫來防止與其他變數衝突,便於區分。

5樓:金色潛鳥

沒有必須大寫的要求,你用小寫或大小寫混合都可以。但傳統習慣,大多數人 用全大寫加下劃線的方法

6樓:匿名使用者

這裡的#ifndef是條件編譯,不知道你是否瞭解這個,它完整的結構是#ifndef /*一些***/ #endif 將上面的例子代入到這裡就是如果 _test_h_ 是沒有被定義過的,那麼就執行中間的**,如果已經被定義過了,就不執行中間的**,這裡的

_test_h 是一個常量,而跟你所說的標頭檔案是沒有什麼關係的,只是書寫的形式上有點像,不知道這樣解釋你是否明白?

C語言為什麼要包含標頭檔案,C語言程式設計時為什麼要加標頭檔案?

標頭檔案中含有一些宣告和已編譯好了的函式,可以提高程式時間複雜度和空間複雜度,簡化程式。如stdio.h標頭檔案中包含scanf,printf,sprintf等函式,只有包含了stdio.h標頭檔案才能正常使用,否則無法使用,只能自己編寫其他函式代替。因為你c語言可以做很多事,就像你去旅行會把你家的...

在C語言中,標頭檔案的作用是什麼,c語言標頭檔案的是幹什麼用的?

1 加強型別檢查,提高 得型別安全性。在c 中使用標頭檔案,對自定義型別的安全也是非常重要的。雖然,在語法上,同一個資料型別 如一個class 在不同的原始檔中書寫多次是允許的,程式設計師認為他們是同一個自定義型別。2 減少 的重複書寫,提高編寫和修改程式的效率。在程式開發的過程中,對某些資料型別或...

C 標頭檔案iomanip有些什麼功能

在c 程式裡面經常見到下面的標頭檔案 include 這裡面iomanip的作用比較多 主要是對cin,cout之類的一些操縱運運算元,比如setfill,setw,setbase,setprecision等等。它是i o流控制頭文 件,就像c裡面的格式化輸出一樣.以下是一些常見的控制函式的 dec...