C語言檔案包含與條件編譯

2022-04-25 23:30:47 字數 1597 閱讀 3752

1.首先檔案包含的兩種查詢路徑:

1.在編譯器include系統路徑中查詢檔案

2.在原始檔所處的檔案中查詢,如果找不到再在系統路徑中查詢

2.檔案重複包含問題:

1.使用條件編譯:

#if !define(__hello__)

#define __hello__

.....        //標頭檔案內容

#endif

2.使用特殊預處理命令#pragma once

#pragma once

....         //標頭檔案內容

即在標頭檔案第一行增加這個預處理命令,它的意思是:在編譯乙個原始檔時,只對該檔案包含一次

二.條件編譯

目的:根據需要將源程式的不同部分編譯程序式

典型的條件編譯是將程式編譯分成除錯版本(debug)和發行版(release)

1.條件編譯使用巨集定義條件,其命令形式:

命令形式:

#define 條件字段

#define 條件字段  常量表示式

例如:(1)#define debug //表示定義debug

(2)#define  win 0x00000001 // 表示定義win 且值......

主流的編譯器系統也支援通過編譯引數設定條件,如gcc命令列使用:

gcc -d 條件字段 //(1)

gcc -d條件字段=常量表示式 //(2)

gcc -debug

gcc -dwinver=0x0501

vc命令列使用:

cl /d 條件字段  //(1)

cl /d 條件字段=常量表示式//(2)

2.#ifdef、#ifndef

#ifdef條件編譯命令測試條件字段是否定義,以此選擇參與編譯的程式**段,它有兩種命令形式:

#ifdef 條件字段

程式**1

#endif

#ifdef 條件字段

程式**1

#else

程式**2

#endif

表示如果條件字段已經被#define 定義過,無論是否有值,編譯器只編譯程式**段1,否則只編譯程式**段2,程式**段可以是任意行數的程式或預處理指令。

下面**測試是否是否使用vc編譯器且為控制台程式,如果是則編譯程式**段:

#ifdef __msc__ver  //如果是vc++編譯器,其內部已定義

#ifndef _console   //vc++編譯器根據控制台編譯引數內部已定義

......             //程式**

#endif

#endif

3.#if - #elif

#if 條件編譯命令根據表示式的值選擇參與編譯的程式**,其命令形式為:

#if 常量表示式

程式**1

#else

程式**2

#endif

當預處理器遇到#if命令時,先計算常量表示式(像if語句那樣),如果表示式的值非0(即為真),則編譯程式**1,否則編譯程式**2.請注意,常量表示式只能使用由#define定義的常量,不能像if語句那樣使用程式中的變數。。。。沒有定義過的表示式#if將其值作為 0.

c 基礎(3 5)預處理 巨集 檔案包含 條件編譯

巨集定義 相關注意點 1.不帶引數的巨集定義 1 巨集名一般用大寫 2 使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如 陣列大小常用巨集定義 3 可以用 undef命令終止巨集定義的作用域 4 巨集定義可以巢狀 2.帶引數的巨集定義 1 實參如果是表示式容易出問題 d...

c語言檔案包含

檔案包含是指乙個c語言源程式中將另乙個c語言源程式包含進來,通過include預處理指令實現。一般形式 include 被包含檔名 或 include 被包含檔名 2.作用 將指定檔案包含在當前檔案中,插入至檔案包含指令相應位置處。使用檔案包 含指令,可以減少程式設計人員的重複勞動,提高程式開發效率...

C 標頭檔案的包含與編譯優化

寫c 程式時,不要標頭檔案中包含太多其他的標頭檔案,除非絕對必要。通常我們在標頭檔案中宣告類,在cpp檔案中實現該類的函式。如果成員函式的引數是別的類的宣告或引用,則可能會直接包含該類的宣告對應的標頭檔案。舉個例子 我定義兩個類 a 分別對應的檔案a.h,a.cpp 和b 分別對應的檔案b.h,b....