今天,我的一個同學告訴我了一個define的另一用法,之前我是真心不知啊!非常感謝他願意告訴我,他願意與我分享,我又怎木能”吃獨食“呢!哈哈!所以我就想把他記錄下來,分享給各位看客,同時也使自己不會忘記。好了,開始了!!
首先來看一個例子:
這個很平常,大家都會用,但如果是下面這樣使用,可以嗎?
好,讓我們來編譯一下,看是什麼情況。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICA8aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140319/20140319092240332.jpg" alt="\">
再看一下,宏展開後是怎木樣的! (宏展開:$: gcc -E -P tt.c > file, 過後打開file文件就會看見)
編譯時 發現錯誤,重定義了 i 變量。這是為什麼?
因為定義的宏是在編譯時就在調用處展開了,當兩個宏定義FUN()在同一作用域中調用時,就會發生變量重定義了。
那麼有什麼方法可以使這種調用正確呢?請看下面:
經編譯,沒法現錯誤,為什麼?我們再來看看展開後的宏:
沒發生錯誤,是因為在這裡產生了兩個不同的變量,i1,i2,。