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...