# 和 ## 操作符是和#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命令的另外乙個功能就是替換引數,使它 假冒建立函式一樣使用. 如下的**:#define false 0
...int done = 0;
while( done != true )
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) )當使用複雜的巨集時,最好使用額外的圓括號. 注意在以上的例子中, 變數"x"總是出現在它自己的括號中. 這樣, 它就可以在和0比較,或變成負值(乘以-1)前計算值. 同樣的, 整個巨集也被括號圍繞, 以防止和其它**混淆. 如果你不注意的話, 你可能會被編譯器曲解你的**....int x = -1;
while( absolute_value( x ) )
語法:
#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"進行除錯的方法更簡單.cout << "this is the test version, i=" << i << endl;
#else
cout << "this is the production version!" << endl;
#endif
語法:
#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...