關於C 巨集定義問題,關於C 巨集定義避免多次包含的問題,如何解決?

時間 2021-08-30 10:26:27

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中。...