1樓:黃邦勇帥哥哥
不能在同乙個檔案中包含標頭檔案兩次。一般不會犯這種錯誤,但是當使用包含了乙個標頭檔案的檔案時有可能在不知情的情況下犯這個錯誤。
使用前處理器指令#ifndef來解決上面的問題。語名#ifndef hyong…..#endi表示僅當以前沒有使用前處理器編譯指令#define定義的名稱hyong時才處理#ifndef….
#endif之間的語句。#define通常建立符號常量,比如#define h 3;把常量3定義為名字h,但只使用#define就能建立名稱,比如#define h;就建立了乙個名稱h。完整的#ifndef….
#endif語句的例子如下:#ifndef hy #define hy void g();#endif;該語句的執行順序為:編譯器首先遇到該標頭檔案時,名稱hy沒有被定義,這時編譯器就將檢視#ifndef….
#endif之間的內容,並讀取到#define hy這一行。如果在同一檔案中遇到包含該標頭檔案的**時,編譯器就知道hy這個名字已經被#define定義碰桐跡了,從而跳過#ifndef….#endif之間的內容。
注意這種方法並不能防止標頭檔案被包含兩次,而只是讓他忽略除第一次包輪源含之外的所有內容。
上面的內容節選笑並自本人文庫裡的文章《c++名稱空間與作用域專題》,希望對你有幫助,如果你對前處理器不瞭解,可以再去**本人的另一篇文章《c++巨集,前處理器,rtti,typeid與強制型別轉換專題》
2樓:網友
#define expression expression」是巨集定義,在編譯時,用後者來替換程式檔案中的前者。注意括號的使用:如。
#define m(y) y*y 是不安全的 應該寫成:#define m(y) (y)*(y).舉個例子就是(a+b)*(a+b),我們只能用第二種表達。
#ifndef variable_name
顧名思義,是當vaiable_name沒有被巨集定義時,執行下面的程式段。通常還桐團有與#else搭配。
#ifdef variable_name 是當局晌橘vaiable_name被巨集定義時,執行下謹物面的程式段。通常也要與#else搭配。
找本專業的書好好地看看。
3樓:網友
通空告常情況不必注意檔案順序。例如:
檔案#define aaaa
檔案#ifndef aaaa
#define aaaa
#endif
上鬥銀明例不論先編譯哪個文搏激件,aaaa都只會被定義一次!
c++中怎樣用條件編譯防止多檔案重複編譯!
4樓:匿名使用者
假設標頭檔案為 方法一: 最上面加上 #pragma once方法二: 中上面加上 #ifndef __h_test_ #define __h_test_中間加上你之前的**,主要是方法的宣告,比如 int add(int a, int b);.
最後面加上 #endif
5樓:匿名使用者
新版的編譯器內建支援這樣的功能,而不需要你自己設定什麼。
什麼叫條件編譯,什麼叫檔案包含,舉個例子,分別有什麼作用於意義
6樓:飄雨
條件編譯例子:
#if 表示式。
#else#endif
說明:有時希望對其中一部分內容只在滿足一定條件下才進行編譯,即對一部分內容指定編譯條件,這就是「條件編譯」
檔案包含:#include //標頭檔案。
#include ""//自定義的標頭檔案。
說明:標頭檔案作為一種包含功能函式、資料介面宣告的載體檔案,包含檔案相當於把標頭檔案的內容載入到當前頁面。
7樓:滑鼠弟弟
條件編譯:
#define a
#if a**1#endif
說明:如果編譯器遇到最後面以#endif結尾的#if指令時,當指定的符號已經定義時,才執行#if和#endif之間的**。如上面的**,由於a已經定義,則執行編譯**1.
若將#define a刪掉,則無視**1.
所謂包含檔案目錄就是你安裝編譯軟體時,在安裝目錄下生成的一些目錄中,大多數會有乙個include目錄,在該目錄下存放了編譯器提供的標頭檔案,像常見的等標頭檔案。
8樓:一嘯
#define x 1
#if 表示式 (如x)
**段a#else
**段b#endif
條件編譯的排版
9樓:破鬼鬼
條件編譯關鍵字語句頂格左對齊;
所含的#include語句(塊) #define語句(塊)甚至是被巢狀下級條件編譯語句塊,按照語句塊巢狀的排版方式進行縮排排版 。 這種情況下,條件編譯語句塊不影響函式體。
條件編譯關鍵字語句頂格左對齊;
所含的函式體定義無需縮排,依舊按照單個函式體定義的排版方式進行。 a)當條件編譯語句塊與被包語句所屬的語句塊之間沒有邏輯路徑交叉時,以下兩種方式均可。
按照語句塊巢狀方式進行縮排排版 (推薦);
條件編譯語句不影響原先語句塊排版,條件編譯語句與所包含的關鍵字語句塊左對齊 。
b)當條件編譯語句塊與被包語句所屬的語句塊之間存在邏輯路徑交叉時。
條件編譯語句頂格左對齊,其它語句按照正常順序排版。
c語言中條件編譯的作用
10樓:網友
你如果講乙個函式宣告2次,就會報錯。所以把函式宣告寫在標頭檔案中後,如果引用了2次這個標頭檔案,也會報錯。#ifndef #define 巨集就是用來避免標頭檔案重複包含的,意思是 如果沒有這個定義,就定義下面的內容。
條件編譯是為了**能在不同的環境中都編譯通過,通用性更好。
11樓:軍軍
防止重複包含,你完全不用去管它,編譯器會搞定的。
12樓:網友
條件編譯為了提高程式的可移植性,增加程式的靈活性。便於程式在不同的軟硬體環境下都可正常執行而不需要修改程式。
比如說乙個商業軟體,面向的是不同的硬體系統和軟體系統,如果移植性不好,那賣出去的軟體在每個環境下都要單獨設定,那軟體公司的開發人員每天都要做這樣的修改程式的工作,會影響正常的工作。所以對需要的部分進行條件編譯,可以大大降低軟體需要改動的部分或者不改動。
c語言中,什麼是條件編譯
13樓:網友
#ifdef 表示式。
表示式#else 表示式。
表示式#endif
就是 如果定義了什麼,,就幹什麼什麼。
否則,就幹什麼什麼。
#endif是條件編譯的作用域,到此結束。
14樓:網友
一般情況下,源**檔案中的所有行都參加編譯,但有時需要指定一部分**在某個條件下才被編譯,這就叫做條件編譯。
條件編譯發生在預處理階段,在c中,主要通過#if、#elif、#else、#ifdef、#ifndef、#endif來給一段**附加上編譯條件,然後前處理器收集滿足條件的可以進行編譯的**,這樣經過預處理,不滿足條件的**就不會被編譯。
再來說一下上面幾個預處理指令的用法:
#if 條件1
語句塊1#elif 條件2
語句塊2#else
語句塊3#endif
可以看到,它和普通的條件結構語句很相似,就是滿足條件1就編譯語句塊1,否則如果滿足條件2就編譯語句塊2,否則編譯語句塊3。最後必須用#endif結尾。
#ifdef和#ifndef用法是:
#ifdef 符號。
語句塊#endif
#ifndef 符號。
語句塊#endif
ifdef意思是如果定義了指定的符號就編譯下面的語句塊;ifndef相反,如果沒定義指定的符號,就編譯下面的語句塊。
語句塊中也可以加預處理指令,這些預處理指令和其他語句一樣,只有當滿足條件時,才會被處理。
另外,ifndef常用於防止乙個標頭檔案的重複引用。
c語言條件編譯的目的是防止重複定義,請問是防止單個檔案內的重複定義?還是乙個工程中的重複定義?
15樓:網友
因為編譯的時候是按檔案編譯的,所以是防止單個檔案內重複定義。
多個cpp檔案如何一起編譯?
16樓:天雲小店
將函式的宣告放到標頭檔案,函式的定義放在cpp檔案,之後再主函式中,將標頭檔案包含進來,進行聯編。
c語言中的條件編譯問題
17樓:網友
先解釋下原始檔目錄:原始檔就是你的c檔案,原始檔目錄就是c檔案所在的目錄,這明白吧!
一般比如說有個led專案,我要建 就就可以#include 「帶尖括號的一般是你用的編譯器已經設定好的,有固定的目錄。
比如你#include寫成了#include""那麼編譯器會先在你的原始檔目錄查詢這個檔案,如果沒有再到別的地方查詢,所以這兩種方法的選擇對程式執行效率有影響的。
18樓:網友
編譯器的選項設定以及工程的設定裡都有一項是包含路徑假設有乙個標頭檔案 ,在設定的包含路徑裡有檔案。
然後有乙個檔案,他在你的資料夾d:\work下,同時該資料夾下也有乙個叫的標頭檔案。
而#include"" 會優先搜尋檔案所在的資料夾,所以會使用d:\work資料夾下的檔案,如果這兩個標頭檔案內容不一樣,則會造成不同的編譯結果。
19樓:網友
#include <>表示該原始檔是在當前的目錄下,編譯器會在當前目錄下為你尋找與之對應的原始檔。
#include " ":表示該原始檔不是在當前的目錄下,編譯器會在整個系統檔案中為你尋找這個原始檔。
20樓:網友
原始碼目錄就是你寫**的目錄 ,用「」代表,<>代表首先查詢/usr/include 目錄。
21樓:匿名使用者
#include"lcd "先在原始檔目錄查詢,表示當前截圖的這個c或者c++檔案所在的目錄,如果沒有才會去系統定義的目錄中去找。
#include <>則不會在當前目錄查詢,而直接到系統定義的目錄中去找。
裝修監工需要注意些什麼,裝修監工需要注意什麼?
1.toyobi 鞋櫃的隔板不要做到頭,留一點空間好讓鞋子的灰能漏到最底 層,水槽和燃氣灶上方裝燈。定衛生間地漏的位置時一定要先想好,量好尺寸。地 漏最好位於磚的一邊,如果在磚的中間位置的話,無論磚怎麼樣傾斜,地漏都不會 是最低點。2.衛生間,空調插座均未設計開關.特別是衛生間電熱水器,以一雙級開關...
去跑馬場騎馬要注意些什麼,騎馬需要注意些什麼?
1 永遠不要站在馬的後方和側後方,防止被踢。2 上馬前一定讓領隊或馬主檢查一下肚帶是否繫緊,繫緊後才能上馬,肚帶不繫緊容易轉鞍,這是最危險的。騎行中每隔一段時間也要檢查一下肚帶的鬆緊程度。3 選擇鞍上帶鐵環的馬,鐵環幫助你保持平衡。4 正確的騎馬姿勢是 腳前半部踩蹬,上身直立坐穩馬鞍,這是小走的姿勢...
關於信用卡需要注意些什麼,信用卡需要注意什麼
信用卡是可以先消費後還款的,可以享受20 50天的免息還款期,消費積分還可以兌換禮品,缺錢的時候可以應應急,丟了還不用擔心可以掛失。好處是比較多的。需要注意的就是到您到期還款日之前一定不要忘了還錢,晚還錢屬於逾期,就要上人民銀行網了,個人信用就不太好了。如果欠的多了實在還不了,那麼也要在到期還款日前...