1樓:匿名使用者
c++ 巨集定義將一個識別符號定義為一個字串,源程式中的該識別符號均以指定的字串來代替。前面已經說過,預處理命令不同於一般c++語句。因此預處理命令後通常不加分號。
這並不是說所有的預處理命令後都不能有分號出現。由於巨集定義只是用巨集名對一個字串進行簡單的替換,因此如果在巨集定義命令後加了分號,將會連同分號一起進行置換。
定義帶引數的巨集時,巨集體中與引數名相同的字串適當地加上圓括號是十分重要的,這樣能夠避免
可能產生的錯誤。例如,對於巨集定義:
#define sq(x) x*x
當程式中出現下列語句:
m=sq(a+b);
替換結果為:
m=a+b*a+b;
這可能不是我們期望的結果,如果需要下面的替換結果:
m=(a+b)*(a+b);
應將巨集定義修改為:
#define sq(x) (x)*(x)對於帶參的巨集定義置換的方法是:在程式中如果有帶實參的巨集(如"sub(2,3)"),則按"#define"命令列中指定的字串從左到右進行置換。如果串中包含巨集中的形參(如a、b),則將程式語句中相應的實參(可以是常量、變數或者表示式)代替形參,如果巨集定義中的字串中的字元不是引數字元(如a-b中的-號),則保留。
這樣就形成了置換的字串。
2樓:黃邦勇帥哥哥
#define macro_
改為#define macro_ "exit"
下面這個地方真的讓偶百思不得其解了
#define macro_ << cin
你到底要把macro_定義為什麼東東啊,如果把macro_定義為int這樣的內建型別,則中間的一堆語句可以解釋,那麼s=macro_又何解?如果想把macro定義為一個常量,那麼s=macro_以上的語句又何解啊。真是高人啊
那這樣改就行了
#define macro_ << cin
改為#define macro_ cin>>
下面一句也要改
macro_ macro_maxvalue = numeric_limits::max();
需要改為兩條語句,如下
macro_maxvalue = numeric_limits::max();
macro_ macro_maxvalue; //注意macro_後面有一個空格
同理macro_ macro_minvalue = numeric_limits::min();
也要改為兩條語句
macro_minvalue = numeric_limits::min();
macro_ macro_minvalue ;
彼人對你的macro_minvalue = numeric_limits::min();這條語句還是不夠理解,如果這條語句表示使用=後面的東東去初始化macro_minvalue的話,則上面的修改方示就沒有錯。如果是其他用途,那就不好整了
記住一條簡單規則就行:#define是簡單的替換,比如
#define macro_ cin>>
那麼語句macro_ macro_minvalue ;會被替換為
cin>> macro_minvalue;
因此其意思就是輸入macro_minvalue的值。
3樓:匿名使用者
很簡單你先把完整的**寫出來
然後再把需要定義為巨集的**位置處做個標記 並把該**刪除
然後再定義你的巨集 然後再把所有的標記換成你的巨集明 就萬無一失了
4樓:匿名使用者
樓上的都說的挺好的
巨集是用來定義常量的
比如: #define pi 3.14
5樓:陰鈺
同意樓上,用c++就儘量不用巨集,這是優秀的程式設計習慣
6樓:孟羽然
#define macro_
這裡定義了一個空的巨集
while ( macro_ != "exit") {這裡經過巨集替換之後就會變成:
while ( != "exit") {
顯然會編譯不通過。
你定義該巨集的目的是什麼?要實現什麼機能?
關於c++巨集定義避免多次包含的問題,如何解決?
7樓:手機使用者
首先,這些巨集bai
定義不是在cpp檔案中du,而是在頭文zhi件中的。dao還知道,頭專檔案一般是用來聲屬明的,會被其他的原始檔和標頭檔案include,當被多個檔案include的時候就會造成重複宣告。為了使得只宣告一次,引入問題中所說的巨集定義,一般以檔名大寫和_來當巨集的名字。
關於C語言巨集定義的問題,C語言的巨集定義問題
錯誤原因 定義巨集的時候 define print a 多了一個分號 一直到下面 的時候巨集自動幫你替換成 printf the end 那麼根據for迴圈的規律,不加 的情況下,它只執行 printf the end 所以不一樣,第2個之所以只輸出一個其實那是在for迴圈結束後才執行的 注 巨集定...
C語言中的巨集定義如何使用,c語言巨集定義如何用?用巨集定義有什麼優點?
正確的完整輸出 3 個整數的程式結構應該按照如下寫法 define n 3 include int main for i 0 i n i 迴圈輸出整數陣列 a 中的 3 個數字,特別要注意 i 必須要寫成 i n,而不能夠寫成 i n,否則的話,就會產生越界錯誤。printf d t a i pri...
C 中的巨集定義是什麼,C 中,巨集定義與一般的定義有什麼區別?
向上爬的蝸牛 namespace 名字空間 名稱空間,一個程式可能由不同的人來寫,為了避免兩個人所寫的變數名衝突 同名 我們可以使用namespace 將自己要使用的庫函式或變數在該名字空間中定義的.避免了不必要的衝突了。c 標準程式庫中的所有識別符號都被定義於一個名為std的namespace中。...