C 第一課 預處理命令

2022-02-19 22:41:27 字數 3080 閱讀 3827

# 和 ## 操作符是和#define巨集使用的. 使用# 使在#後的首個引數返回為乙個帶引號的字串. 例如, 命令

#define to_string( s ) # s
將會使編譯器把以下命令

cout << to_string( hello world! ) << endl;
理解為

cout << "hello world!" << endl;
使用##鏈結##前後的內容. 例如, 命令

#define concatenate( x, y ) x ## y

...int xy = 10;

...

將會使編譯器把

cout << concatenate( x, y ) << endl;
解釋為

cout << xy << endl;
理所當然,將會在標準輸出處顯示'10'.

語法:

#define macro-name replacement-string
#define命令用於把指定的字串替換檔案中的巨集名稱 . 也就是說, #define使編譯器把檔案中每乙個macro-name替換為replacement-string. 替換的字串結束於行末. 這裡是乙個經典的#define應用 (至少是在c中):

#define true 1

#define false 0

...int done = 0;

while( done != true )

#define命令的另外乙個功能就是替換引數,使它 假冒建立函式一樣使用. 如下的**:

#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) )

...int x = -1;

while( absolute_value( x ) )

當使用複雜的巨集時,最好使用額外的圓括號. 注意在以上的例子中, 變數"x"總是出現在它自己的括號中. 這樣, 它就可以在和0比較,或變成負值(乘以-1)前計算值. 同樣的, 整個巨集也被括號圍繞, 以防止和其它**混淆. 如果你不注意的話, 你可能會被編譯器曲解你的**.

語法:

#error message
#error命令可以簡單的使編譯器在發生錯誤時停止. 當遇到乙個#error時,編譯器會自動輸出行號而無論message的內容. 本命令大多是用於除錯.

這些命令讓編譯器進行簡單的邏輯控制. 當乙個檔案被編譯時, 你可以使用這些命令使某些行保留或者是去處.

#if expression
如果表示式(expression)的值是"真"(true),那麼緊隨該命令的**將會被編譯.

#ifdef macro
如果"macro"已經在乙個#define宣告中定義了, 那麼緊隨該命令的**將會被編譯.

#ifndef macro
如果"macro"未在乙個#define宣告中定義, 那麼緊隨命令的**將會被編譯.

一些小邊注: 命令#elif是"elseif"的一種縮寫,並且他可以想你所意願的一樣工作. 你也可以在乙個#if後插入乙個"defined"或者"!defined"以獲得更多的功能.

這裡是一部分例子:

#ifdef debug

cout << "this is the test version, i=" << i << endl;

#else

cout << "this is the production version!" << endl;

#endif

你應該注意到第二個例子比在你的**中插入多個"cout"進行除錯的方法更簡單.

語法:

#include #include "filename"
本命令包含乙個檔案並在當前位置插入. 兩種語法的主要不同之處是在於,如果filename括在尖括號中,那麼編譯器不知道如何搜尋它. 如果它括在引號中, 那麼編譯器可以簡單的搜尋到檔案. 兩種搜尋的方式是由編譯器決定的,一般尖括號意味著在標準庫目錄中搜尋, 引號就表示在當前目錄中搜尋. the spiffy new 整潔的新c++ #include目錄不需要直接對映到filenames, 至少對於標準庫是這樣. 這就是你有時能夠成功編譯以下命令的原因

#include
語法:

#line line_number "filename"
#line命令是用於更改__line__ 和 __file__變數的值. 檔名是可選的. __line__ 和 __file__ 變數描述被讀取的當前檔案和行. 命令

#line 10 "main.cpp"
更改行號為10,當前檔案改為"main.cpp".

#pragma命令可以讓程式設計者讓編譯器執行某些事. 因為#pragma命令的執行很特殊,不同的編譯器使用有所不同. 乙個選項可以跟蹤程式的執行.

#undef命令取消乙個先前已定義的巨集變數, 譬如乙個用#define定義的變數.

語法:

__line__

__file__

__date__

__time__

_cplusplus

__stdc__

下列引數在不同的編譯器可能會有所不同, 但是一般是可用的:

#define studydefine_string(s) #s;  //

使用#表示將傳入的任何內容都當作字串型別並返回。

#define studydefine_concatenate(x,y) x##y;//

使用##表示將兩個值拼接成新的變數。

#define studydefine_absolute(x)((x)<0?-1*(x):(x));//

使變數"x"總是出現在它自己的括號中. 這樣, 它就可以在和0比較,或變成負值(乘以-1)前計算值. 同樣的, 整個巨集也被括號圍繞, 以防止和其它**混淆.

#include

using

namespace

std;

intmain()

輸出結果:

C語言第一課

一 c基礎 進製的轉換 進製,進製機制 常見的有二進位制 八進位制 十進位制 十六進製制 例 二進位制 0101010 八進位制 0235 十進位制 9 十六進製制 0x8a 注 十六進製制後面的10 16由a,b,c,d,e,f代替 進製的區分 八進位制前面會加 0 十六進製制後面會加 0x 進製...

c的第一課

一 前言 一切,都想從不一樣做起。大學,原以為會和我當時高中想象的那樣,可以談場轟轟烈烈的戀愛,可以自由自在的旅行,可以忘乎所以,盡己之所興。如今,大三結束。驀然回首,卻發現自己浪費了那麼多改變自己的機會。如今,大學只剩最後一年,我要用這最後的時間去彌補曾經所浪費的一切,從現在開始,朝著自己的目標勇...

C語言第一課

開始的第乙個程式是乙個最簡單的程式,也就是最經典的hello world程式,它的功能為列印出hello world。程式的內容非常簡單,也是c語言編寫程式的基本結構框架。機構的電腦是基於虛擬機器的,其程式設計是gcc的。1.建立hello.c檔案 vim hello.c2.編寫hello worl...