當前位置:首頁 » 編程軟體 » c語言預編譯windows命令

c語言預編譯windows命令

發布時間: 2022-08-05 22:55:08

『壹』 c語言提供的預編譯處理命令主要有哪三種

1.宏定義:用一個指定的標識符(即名字)來代表一個字元串,如:用PI代表3.1415926,#define PI 3.1415926
2.文件包含:指一個源文件可以將另外一個源文件的全部內容包含進來,#include<文件名>
3.條件編譯:對一部分內容指定編譯的條件,即滿足一定的條件才編譯,主要有:
(1)#ifdef標識符
程序段1
#eles
程序段2
#endif
(2)#ifndef標識符
程序段1
#eles
程序段2
#endif
(3))#if標識符
程序段1
#eles
程序段2
#endif

『貳』 c語言編程的預處理命令

調用io.h這個頭文件

『叄』 C語言幾個預編譯指令的用法

處理指令是以#號開頭的代碼行。#號必須是該行除了任何空白字元外的第一個字元。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字元。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源代碼做某些轉換。下面是部分預處理指令:
指令 用途
# 空指令,無任何效果
#include 包含一個源代碼文件
#define 定義宏
#undef 取消已定義的宏
#if 如果給定條件為真,則編譯下面代碼
#ifdef 如果宏已經定義,則編譯下面代碼
#ifndef 如果宏沒有定義,則編譯下面代碼
#elif 如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
#endif 結束一個#if……#else條件編譯塊
#error 停止編譯並顯示錯誤信息
希望可以幫到你,謝謝!

『肆』 c語言怎麼用微軟的軟體編譯(過程)

DOS下面是沒有cl的,cl是Windows下命令行方式的編譯工具,IDE也是調用它編譯的。直接cl.exe /help就能看到幫助,貼給你吧 VS2010的(2012的可以交叉編譯ARM架構的目標代碼)

用於 80x86 的 Microsoft (R) 32 位 C/C++ 優化編譯器 16.00.40219.01 版
版權所有(C) Microsoft Corporation。保留所有權利。

C/C++ 編譯器選項

-優化-

/O1 最小化空間 /O2 最大化速度
/Ob<n> 內聯擴展(默認 n=0) /Od 禁用優化(默認)
/Og 啟用全局優化 /Oi[-] 啟用內部函數
/Os 優選代碼空間 /Ot 優選代碼速度
/Ox 最大化優化 /Oy[-] 啟用幀指針省略

-代碼生成-

/GF 啟用只讀字元串池 /Gm[-] 啟用最小重新生成
/Gy[-] 分隔鏈接器函數 /GS[-] 啟用安全檢查
/GR[-] 啟用 C++ RTTI /GX[-] 啟用 C++ EH (與 /EHsc 相同)
/EHs 啟用 C++ EH (沒有 SEH 異常) /EHa 啟用 C++ EH (w/ SEH 異常)
/EHc 外部「C」默認為 nothrow
/fp:<except[-]|fast|precise|strict> 選擇浮點模式:
except[-] - 在生成代碼時考慮浮點異常
fast -「fast」浮點模式;結果可預測性比較低
precise -「precise」浮點模式;結果可預測
strict -「strict」 浮點模式(意味著 /fp:except)
即使使用 /fp:except,/Qfast_transcendentals 也生成內聯內部 FP
/GL[-] 啟用鏈接時代碼生成 /GA 為 Windows 應用程序進行優化
/Ge 對所有函數強制堆棧檢查 /Gs[num] 控制堆棧檢查調用
/Gh 啟用 _penter 函數調用 /GH 啟用 _pexit 函數調用
/GT 生成纖程安全 TLS 訪問 /RTC1 啟用快速檢查(/RTCsu)
/RTCc 轉換為較小的類型檢查 /RTCs 堆棧幀運行時檢查
/RTCu 未初始化的局部用法檢查
/clr[:option] 為公共語言運行時編譯,其中 option 是:
pure - 生成只包含 IL 的輸出文件(沒有本機可執行代碼)
safe - 生成只包含 IL 的可驗證輸出文件
oldSyntax - 接受 Visual C++ 2002/2003 的託管擴展語法
initialAppDomain - 啟用 Visual C++ 2002 的初始 AppDomain 行為
noAssembly - 不產生程序集 /Gd __cdecl 調用約定
/Gr __fastcall 調用約定 /Gz __stdcall 調用約定
/GZ 啟用堆棧檢查(/RTCs) /QIfist[-] 使用 FIST 而不是 ftol()
/hotpatch 確保可熱修補映像的函數填充
/arch:<SSE|SSE2|AVX> CPU 架構的最低要求,以下選項之一:
SSE - 啟用支持 SSE 的 CPU 可用的指令
SSE2 - 啟用支持 SSE2 的 CPU 可用的指令
AVX - 支持使用 Intel(R) 高級矢量擴展指令
/Qimprecise_fwaits 僅在「try」邊界而不是「try」內部生成 FWAITs
/Qsafe_fp_loads 生成安全 FP 負載

-輸出文件-

/Fa[file] 命名程序集列表文件 /FA[scu] 配置程序集列表
/Fd[file] 命名 .PDB 文件 /Fe<file> 命名可執行文件
/Fm[file] 命名映射文件 /Fo<file> 命名對象文件
/Fp<file> 命名預編譯頭文件 /Fr[file] 命名源瀏覽器文件
/FR[file] 命名擴展 .SBR 文件 /Fi[file] 命名預處理的文件
/doc[file] 處理 XML 文檔注釋,並可選擇命名 .xdc 文件

-預處理器-

/AI<dir> 添加到程序集搜索路徑 /FU<file> 強制使用程序集/模塊
/C 不抽出注釋 /D<name>{=|#}<text> 定義宏
/E 預處理到 stdout /EP 預處理到 stdout,無行號
/P 預處理到文件 /Fx 將插入的代碼合並到文件中
/FI<file> 命名強制包含文件 /U<name> 移除預定義的宏
/u 移除所有預定義的宏 /I<dir> 添加到包含搜索路徑
/X 忽略「標准位置」

-語言-

/Zi 啟用調試信息 /Z7 啟用舊式調試信息
/Zp[n] 在 n 位元組邊界上包裝結構 /Za 禁用擴展
/Ze 啟用擴展(默認) /Zl 省略 .OBJ 中的默認庫名
/Zg 生成函數原型 /Zs 只進行語法檢查
/vd{0|1|2} 禁用/啟用 vtordisp /vm<x> 指向成員的指針類型
/Zc:arg1[,arg2] C++ 語言合規性,這里的參數可以是:
forScope[-] - 對范圍規則強制使用標准 C++
wchar_t[-] - wchar_t 是本機類型,不是 typedef
auto[-] - 對 auto 強制使用新的標准 C++ 含義
trigraphs[-] - 啟用三元祖(默認為關閉)
/ZI 啟用「編輯並繼續」調試信息 /openmp 啟用 OpenMP 2.0 語言擴展

- 雜項 -

@<file> 選項響應文件 /?, /help 列印此幫助消息
/bigobj 生成擴展的對象格式 /c 只編譯,不鏈接
/errorReport:option 將內部編譯器錯誤報告給 Microsoft
none - 不發送報告 prompt - 提示立即發送報告
queue - 在下一次管理員登錄時,提示發送報告(默認)
send - 自動發送報告 /FC 診斷中使用完整路徑名
/H<num> 最大外部名稱長度 /J 默認 char 類型是 unsigned
/MP[n] 最多使用「n」個進程進行編譯 /nologo 取消顯示版權信息
/showIncludes 顯示包含文件名 /Tc<source file> 將文件編譯為 .c
/Tp<source file> 將文件編譯為 .cpp /TC 將所有文件編譯為 .c
/TP 將所有文件編譯為 .cpp /V<string> 設置版本字元串
/w 禁用所有警告 /wd<n> 禁用警告 n
/we<n> 將警告 n 視為錯誤 /wo<n> 發出一次警告 n
/w<l><n> 為 n 設置警告等級 1-4 /W<n> 設置警告等級(默認 n=1)
/Wall 啟用所有警告 /WL 啟用單行診斷
/WX 將警告視為錯誤 /Yc[file] 創建 .PCH 文件
/Yd 將調試信息放在每個 .OBJ 中 /Yl[sym] 為調試庫插入 .PCH 引用
/Yu[file] 使用 .PCH 文件 /Y- 禁用所有 PCH 選項
/Zm<n> 最大內存分配(默認為 %) /Wp64 啟用 64 位埠定位警告

-鏈接-

/LD 創建 .DLL /LDd 創建 .DLL 調試庫
/LN 創建 .netmole /F<num> 設置堆棧大小
/link [鏈接器選項和庫] /MD 與 MSVCRT.LIB 鏈接
/MT 與 LIBCMT.LIB 鏈接 /MDd 與 MSVCRTD.LIB 調試庫鏈接
/MTd 與 LIBCMTD.LIB 調試庫鏈接

-代碼分析-

/analyze[:WX-] 啟用代碼分析
WX- - 即使調用了 /WX,也不應將代碼分析警告視為錯誤

『伍』 在cmd中輸入哪幾句話把c語言編譯和運行出來

1.打開命令行界面:鍵盤win+r,輸入CMD,回車。您可以打開命令行。

『陸』 關於C語言預處理命令

C程序的源代碼中可包括各種編譯指令,這些指令稱為預處理命令。雖然它們實際上不是C語言的一部分,但卻擴展了C程序設計的環境。本節將介紹如何應用預處理程序和注釋簡化程序開發過程,並提高程序的可讀性。ANSI標準定義的C語言預處理程序包括下列命令:
#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明顯,所有預處理命令均以符號#開頭,下面分別加以介紹。

一 #define
命令#define定義了一個標識符及一個串。在源程序中每次遇到該標識符時,均以定義的串代換它。ANSI標准將標識符定義為宏名,將替換過程稱為宏替換。命令的一般形式為:
#define identifier string
注意:
1該語句沒有分號。在標識符和串之間可以有任意個空格,串一旦開始,僅由一新行結束。
2宏名定義後,即可成為其它宏名定義中的一部分。
3 宏替換僅僅是以文本串代替宏標識符,前提是宏標識符必須獨立的識別出來,否則不進行替換。例如:
#define XYZ this is a tes
使用宏printf("XYZ");//該段不列印"this is a test"而列印"XYZ"。因為預編譯器識別出的是"XYZ"
4如果串長於一行,可以在該行末尾用一反斜杠' \'續行。
#defineLONG_STRING"this is a very long\
string that is used as an example"
5 C語言程序普遍使用大寫字母定義標識符。
6 用宏代換代替實在的函數的一大好處是宏替換增加了代碼的速度,因為不存在函數調用的開銷。但增加速度也有代價:由於重復編碼而增加了程序長度。

二 #error
命令#error強迫編譯程序停止編譯,主要用於程序調試。
#error指令使預處理器發出一條錯誤消息,該消息包含指令中的文本.這條指令的目的就是在程序崩潰之前能夠給出一定的信息。
三 #include
命令#i nclude使編譯程序將另一源文件嵌入帶有#include的源文件,被讀入的源文件必須用雙引號或尖括弧括起來。例如:
#include"stdio.h"或者#include<stdio.h>
這兩行代碼均使用C編譯程序讀入並編譯用於處理磁碟文件庫的子程序。
將文件嵌入#i nclude命令中的文件內是可行的,這種方式稱為嵌套的嵌入文件,嵌套層次依賴於具體實現。
如果顯式路徑名為文件標識符的一部分,則僅在那些子目錄中搜索被嵌入文件。否則,如果文件名用雙引號括起來,則首先檢索當前工作目錄。如果未發現文件,則在命令行中說明的所有目錄中搜索。如果仍未發現文件,則搜索實現時定義的標准目錄。
如果沒有顯式路徑名且文件名被尖括弧括起來,則首先在編譯命令行中的目錄內檢索。如果文件沒找到,則檢索標准目錄,不檢索當前工作目錄。
四 條件編譯命令
有幾個命令可對程序源代碼的各部分有選擇地進行編譯,該過程稱為條件編譯。商業軟體公司廣泛應用條件編譯來提供和維護某一程序的許多顧客版本。
#if、#else,#elif及#endif
#if的一般含義是如果#if後面的常量表達式為true,則編譯它與#endif之間的代碼,否則跳過這些代碼。命令#endif標識一個#if塊的結束。
#if constant-expression
statement sequence
#endif
Eg:
#define MAX 91
#include <iostream>
using namespace std;
int main()
{
#if MAX > 99
cout<<"MAX is bigger than 99"<<endl;
#elif MAX > 90
cout<<"MAX is bigger than 90"<<endl;
#else
cout<<"MAX is smaller than 90"<<endl;
#endif
return 0;
}
跟在#if後面的表達式在編譯時求值,因此它必須僅含常量及已定義過的標識符,不可使用變數。表達式不許含有操作符sizeof(sizeof也是編譯時求值)。

#else命令的功能有點象C語言中的else;#else建立另一選擇(在#if失敗的情況下)。注意,#else屬於#if塊。

#elif命令意義與ELSE IF 相同,它形成一個if else-if階梯狀語句,可進行多種編譯選擇。#elif 後跟一個常量表達式。如果表達式為true,則編譯其後的代碼塊,不對其它#elif表達式進行測試。否則,順序測試下一塊。

#if expression
statement sequence
#elif expression1
statement sequence
#endif

在嵌套的條件編譯中#endif、#else或#elif與最近#if或#elif匹配。
# ifdef 和# ifndef

條件編譯的另一種方法是用#ifdef與#ifndef命令,它們分別表示"如果有定義"及"如果無定義"。# ifdef的一般形式是:

# ifdef macroname
statement sequence
#endif

#ifdef與#ifndef可以用於#if、#else,#elif語句中,但必須與一個#endif。

#define MAX 91
#include <iostream>
using namespace std;

int main()
{
#ifdef MAX
cout<<"hello,MAX!"<<endl;
#else
cout<<"where is MAX?"<<endl;
#endif
#ifndef LEO
cout<<"LEO is not defined"<<endl;
#endif
return 0;
}
命令#undef 取消其後那個前面已定義過有宏名定義。一般形式為:
#undef macroname
命令#line改變__LINE__與__FILE__的內容,它們是在編譯程序中預先定義的標識符。命令的基本形式如下:
#line number["filename"]
其中的數字為任何正整數,可選的文件名為任意有效文件標識符。行號為源程序中當前行號,文件名為源文件的名字。命令#line主要用於調試及其它特殊應用。注意:在#line後面的數字標識從下一行開始的數字標識。
#line 100 "jia"
cout<<"#line change line and filename!"<<endl; //line 100
cout<<__LINE__<<endl; //101
cout<<__FILE__<<endl; //jia
五 #pragma
命令#pragma 為實現時定義的命令,它允許向編譯程序傳送各種指令。
#pragma的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機或操作系統專有的特徵。依據定義,編譯指示是機器或操作系統專有的,且對於每個編譯器都是不同的。
其格式一般為: #Pragma Para
1 message 參數。
Message 參數能夠在編譯信息輸出窗口中輸出相應的信息,這對於源代碼信息的控制是非常重要的。其使用方法為:
#pragma message(「消息文本」)
當編譯器遇到這條指令時就在編譯輸出窗口中將消息文本列印出來。
當在程序中定義了許多宏來控制源代碼版本的時候,自己有可能都會忘記有沒有正確的設置這些宏,此時可以用這條指令在編譯的時候就進行檢查。假設希望判斷自己有沒有在源代碼的什麼地方定義了_X86這個宏可以用下面的方法
#ifdef _X86
#pragma message(「_X86 macro activated!」)
#endif
當定義了_X86這個宏以後,應用程序在編譯時就會在編譯輸出窗口裡顯示「_
X86 macro activated!」。就不會因為不記得自己定義的一些特定的宏而抓耳撓腮了。

2 code_seg 參數。
格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能夠設置程序中函數代碼存放的代碼段,當開發驅動程序的時候就會使用到它。

3 #pragma once (比較常用)
只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次。這條指令實際上在VC6中就已經有了,但是考慮到兼容性並沒有太多的使用它。

4 #pragma hdrstop
表示預編譯頭文件到此為止,後面的頭文件不進行預編譯。BCB可以預編譯頭文件以加快鏈接的速度,但如果所有頭文件都進行預編譯又可能占太多磁碟空間,所以使用這個選項排除一些頭文件。
有時單元之間有依賴關系,比如單元A依賴單元B,所以單元B要先於單元A編譯。你可以用#pragma startup指定編譯優先順序,如果使用了#pragma package(smart_init) ,BCB就會根據優先順序的大小先後編譯。

5 #pragma resource "*.dfm"
表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體外觀的定義。

6 #pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價於:
#pragma warning(disable:4507 34) /* 不顯示4507和34號警告信息。如果編譯時總是出現4507號警告和34號警告, 而認為肯定不會有錯誤,可以使用這條指令。*/
#pragma warning(once:4385) // 4385號警告信息僅報告一次
#pragma warning(error:164) // 把164號警告信息作為一個錯誤。
同時這個pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
這里n代表一個警告等級(1---4)。
#pragma warning( push )保存所有警告信息的現有的警告狀態。
#pragma warning( push, n)保存所有警告信息的現有的警告狀態,並且把全局警告等級設定為n。
#pragma warning( pop )向棧中彈出最後一個警告信息,在入棧和出棧之間所作的一切改動取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在這段代碼的最後,重新保存所有的警告信息(包括4705,4706和4707)。

7 pragma comment(...)
該指令將一個注釋記錄放入一個對象文件或可執行文件中。
常用的lib關鍵字,可以幫連入一個庫文件。

8 progma pack(n)
指定結構體對齊方式。#pragma pack(n)來設定變數以n位元組對齊方式。
n 位元組對齊就是說變數存放的起始地址的偏移量有兩種情況:
第一、如果n大於等於該變數所佔用的位元組數,那麼偏移量必須滿足默認的對齊方式,
第二、如果n小於該變數的類型所佔用的位元組數,那麼偏移量為n的倍數,不用滿足默認的對齊方式。
結構的總大小也有個約束條件,分下面兩種情況:如果n大於所有成員變數類型所佔用的位元組數,那麼結構的總大小必須為佔用空間最大的變數佔用的空間數的倍數; 否則必須為n的倍數。
下面舉例說明其用法。
#pragma pack(push) //保存對齊狀態
#pragma pack(4)//設定為4位元組對齊
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//恢復對齊狀態
為測試該功能,可以使用sizeof()測試結構體的長度!

『柒』 C語言如何用dos命令編譯運行

在控制台編譯運行一個C程序,在windows上的c語言編譯器為cl.exe,在linux平台上的c語言編譯器是gcc。

在命令提示符中,執行cl test.c(test.c是c語言源碼文件)。下圖是用cl編譯器編譯main.cxx的誰的,並且執行生成的程序main.exe。

『捌』 c語言中預處理命令都有哪些

我們可以在C源程序中插入傳給編譯程序的各中指令,這些指令被稱為預處理器指令,它們擴充了程序設計的環境。現把常用的預處理命令總結如下:
1. 預處理程序
按照ANSI標準的定義,預處理程序應該處理以下指令:
#if #ifdef #ifndef #else #elif
#endif
#define
#undef
#line
#error
#pragma
#include
顯然,上述所有的12個預處理指令都以符號#開始,,每條預處理指令必須獨佔一行。
2. #define
#define指令定義一個標識符和一個串(也就是字元集),在源程序中發現該標識符時,都用該串替換之。這種標識符稱為宏名字,相應的替換稱為宏代換。一般形式如下:
#define macro-name char-sequence
這種語句不用分號結尾。宏名字和串之間可以有多個空白符,但串開始後只能以新行終止。
例如:我們使用LEFT代表1,用RIGHT代表0,我們使用兩個#define指令:
#define LEFT 1
#define RIGHT 0
每當在源程序中遇到LEFT或RIGHT時,編譯程序都用1或0替換。
定義一個宏名字之後,可以在其他宏定義中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
宏代換就是用相關的串替代標識符。因此,如果希望定義一條標准錯誤信息時,可以如下定義:
#define ERROR_MS 「Standard error on input \n」
如果一個串長於一行,可在行尾用反斜線」\」續行,如下:
#define LONG_STRING 「This is a very very long \
String that is used as an example」
3. #error
#error指令強制編譯程序停止編譯,它主要用於程序調試。#error指令的一般形式是:
#error error-message
注意,宏串error-message不用雙引號包圍。遇到#error指令時,錯誤信息被顯示,可能同時還顯示編譯程序作者預先定義的其他內容。
4. #include
程序中的#include指令要求編譯程序讀入另一個源文件。被讀入文件的名字必須用雙引號(「」)或一對尖括弧(<>)包圍,例如:
#include 「stdio.h」
#include <stdio.h>
都使C編譯程序讀入並編譯頭文件以用於I/O系統庫函數。
包含文件中可以包含其他#include指令,稱為嵌套包含。允許的最大嵌套深度隨編譯器而變。
文件名被雙括弧或尖括弧包圍決定了對指定文件的搜索方式。文件名被尖括弧包圍時,搜索按編譯程序作者的定義進行,一般用於搜索某些專門放置包含文件的特殊目錄。當文件名被雙括弧包圍時,搜索按編譯程序實時的規定進行,一般搜索當前目錄。如未發現,再按尖括弧包圍時的辦法重新搜索一次。
通常,絕大多數程序員使用尖括弧包圍標準的頭文件,雙引號用於包圍與當前程序相關的文件名。

5. 條件編譯指令
若干編譯指令允許程序員有選擇的編譯程序源代碼的不同部分,這種過程稱為條件編譯。
5.1#if、#else、#elif #endif
條件編譯指令中最常用的或許是#if,#else,#elif和#endif。這些指令允許程序員根據常數表達式的結果有條件的包圍部分代碼。
#if的一般形式是:
#if constant-expression
Statement sequence
#endif
如#if後的常數表達式為真,則#if和#endif中間的代碼被編譯,否則忽略該代碼段。#endif標記#if塊的結束。
#else指令的作用與C語言的else相似,#if指令失敗時它可以作為備選指令。例如:
#include <stdio.h>
#define MAX 100
Int main(void)
{
#if MAX>99
printf(「Compiled for array greater than 99.\n」);
#else
printf(「Complied for small array.\n」);
#endif
return 0;
}
注意,#else既是標記#if塊的結束,也標記#else塊的開始。因為每個#if只能寫一個#endif匹配。
#elif指令的意思是「否則,如果」,為多重編譯選擇建立一條if-else-if(如果-否則-如果鏈)。如果#if表達式為真,該代碼塊被編譯,不測試其他#elif表達式。否則,序列中的下一塊被測試,如果成功則編譯之。一般形式如下:
#if expression
Statement sequence
#elif expression1
Statement sequence
#elif expression2
Statement sequence
.
.
.
#elif expression
Statement sequence
#endif
5.2#ifdef和#ifndef
條件編譯的另一個方法是使用編譯指令#ifdef和#ifndef,分別表示「如果已定義」和「如果未定義」。#ifdef的一般形式如下:
#ifdef macro-name
Statement sequence
#endif
如果macro-name原先已經被一個#define語句定義,則編譯其中的代碼塊。
#ifndef的一般形式是:
#ifndef macro-name
Statement sequence
#endif
如果macro-name當前未被#define語句定義,則編譯其中的代碼塊。

我認為,用這種,可以很方便的開啟/關閉整個程序的某項特定功能。
#ifdef和#ifndef都可以使用#else或#elif語句。
#inlucde <stdio.h>
#define T 10
Int main(void)
{
#ifdef t
Printf(「Hi T\n」);
#else
Printf(「Hi anyone\n」);
#endif
#ifndef M
Printf(「M Not Defined\n」);
#endif
Return 0;
}
6. #undef
#undef指令刪除前面定義的宏名字。也就是說,它「不定義」宏。一般形式為:
#undef macro-name
7. 使用defined
除#ifdef之外,還有另外一種確定是否定義宏名字的方法,即可以將#if指令與defined編譯時操作符一起使用。defined操作符的一般形式如下:
defined macro-name
如果macro-name是當前定義的,則表達式為真,否則為假。
例如,確定宏MY是否定義,可以使用下列兩種預處理命令之一:
#if defined MY

#ifdef MY
也可以在defined之前加上感嘆號」!」來反轉相應的條件。例如,只有在DEBUG未定義的情況下才編譯。
#if !defined DEBUG
Printf(「Final Version!\n」);
#endif
使用defined的一個原因是,它允許由#elif語句確定的宏名字存在。
8. #line
#line指令改變__LINE__和__FILE__的內容。__LINE__和__FILE__都是編譯程序中預定義的標識符。標識符__LINE__的內容是當前被編譯代碼行的行號,__FILE__的內容是當前被編譯源文件的文件名。#line的一般形式是:
#line number 「filename」
其中,number是正整數並變成__LINE__的新值;可選的「filename」是合法文件標識符並變成__FILE__的新值。#line主要用於調試和特殊應用。

9. #pragma
#pragma是編譯程序實現時定義的指令,它允許由此向編譯程序傳入各種指令。例如,一個編譯程序可能具有支持跟蹤程序執行的選項,此時可以用#pragma語句選擇該功能。編譯程序忽略其不支持的#pragma選項。#pragma提高C源程序對編譯程序的可移植性。
10. 預處理操作符#和##
有兩個預處理操作符:#和##,它們可以在#define中使用。
操作符#通常稱為字元串化的操作符,它把其後的串變成用雙引號包圍的串。例如:
#include <stdio.h>
#define mkstr(s) #s
int main(void)
{
Printf(mkstr(I like C));
Return 0;
}
預處理程序把以下的語句:
Printf(mkstr(I like C));
變成
Printf(「I like C」);
操作符##把兩個標記拼在一起,形成一個新標記。例如:
#include <stdio.h>
#define concat(a,a) a##b
int main(void)
{
Int xy = 10;
Printf(「%d」,concat(x,y));
Return 0;
}
預處理程序把以下語句:
Printf(「%d」,concat(x,y));
變成
Printf(「%d」,xy);
操作符#和##主要作用是允許預處理程序對付某些特殊情況,多數程序中並不需要。
11. 預定義宏
C規范了5個固有的預定義宏,它們是:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__
__LINE__和__FILE__包含正在編譯的程序的行號和文件名。
__DATE__和內容形如month/day/year(月/日/年)的串,代表源文件翻譯成目標碼的日期。
__TIME__中的串代表源代碼編譯成目標碼的時間,形如hour:minute:second(時:分:秒)
如果__STDC__的內容是十進制常數1,則表示編譯程序的實現符合標准C。

『玖』 C語言預編譯命令

#include <assert.h> //設定插入點
#include <ctype.h> //字元處理
#include <errno.h> //定義錯誤碼
#include <float.h> //浮點數處理
#include <fstream.h> //文件輸入/輸出
#include <iomanip.h> //參數化輸入/輸出
#include <iostream.h> //數據流輸入/輸出
#include <limits.h> //定義各種數據類型最值常量
#include <locale.h> //定義本地化函數
#include <math.h> //定義數學函數
#include <stdio.h> //定義輸入/輸出函數
#include <stdlib.h> //定義雜項函數及內存分配函數
#include <string.h> //字元串處理
#include <strstrea.h> //基於數組的輸入/輸出
#include <time.h> //定義關於時間的函數
#include <wchar.h> //寬字元處理及輸入/輸出
#include <wctype.h> //寬字元分類

//////////////////////////////////////////////////////////////////////////

標准 C++ (同上的不再注釋)

#include <algorithm> //STL 通用演算法
#include <bitset> //STL 位集容器
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex> //復數類
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque> //STL 雙端隊列容器
#include <exception> //異常處理類
#include <fstream>
#include <functional> //STL 定義運算函數(代替運算符)
#include <limits>
#include <list> //STL 線性列表容器
#include <map> //STL 映射容器
#include <iomanip>
#include <ios> //基本輸入/輸出支持
#include <iosfwd> //輸入/輸出系統使用的前置聲明
#include <iostream>
#include <istream> //基本輸入流
#include <ostream> //基本輸出流
#include <queue> //STL 隊列容器
#include <set> //STL 集合容器
#include <sstream> //基於字元串的流
#include <stack> //STL 堆棧容器
#include <stdexcept> //標准異常類
#include <streambuf> //底層輸入/輸出支持
#include <string> //字元串類
#include <utility> //STL 通用模板類
#include <vector> //STL 動態數組容器
#include <cwchar>
#include <cwctype>

using namespace std;

//////////////////////////////////////////////////////////////////////////

C99 增加

#include <complex.h> //復數處理
#include <fenv.h> //浮點環境
#include <inttypes.h> //整數格式轉換
#include <stdbool.h> //布爾環境
#include <stdint.h> //整型環境
#include <tgmath.h> //通用類型數學宏

熱點內容
網吧怎麼通過伺服器玩網路游戲 發布:2025-02-08 19:59:52 瀏覽:912
文檔編輯加密 發布:2025-02-08 19:56:31 瀏覽:390
phpmysql存儲過程實例 發布:2025-02-08 19:54:40 瀏覽:159
淘寶賣的地下城腳本 發布:2025-02-08 19:41:40 瀏覽:61
安卓怎麼把提升畫質關了 發布:2025-02-08 19:40:11 瀏覽:359
我想你加密 發布:2025-02-08 19:39:24 瀏覽:212
java手機號正則表達式 發布:2025-02-08 19:34:50 瀏覽:350
ue加密 發布:2025-02-08 19:34:05 瀏覽:473
滁州壓縮機 發布:2025-02-08 19:34:03 瀏覽:880
壓縮棉花絮片 發布:2025-02-08 19:33:12 瀏覽:394