1. 計算機編譯系統對宏定義在編譯時進行語法檢查這句話為什麼錯
第一步被換為area=a*b。
宏定義末尾不加分號,減少輸入錯誤和便於修改。宏替換在編譯前進行,不做表達式求解函數調用在編譯後程序運行時進行,只佔編譯時間。
除了一般的字元串替換,函數調用不會。
宏展開不佔運行時間,不分配內存。
宏的啞實結合不存在類型,作用域為其後的程序,還要做參數代換。
格式:數組大小常用宏定義。
預處理是在編譯之前的處理。
宏定義又稱為宏代換;
",利用宏則可以設法得到多個值。
宏展開使源程序變長。
函數只有一個返回值,預處理不做語法檢查。一切以換為前提,准確理解之前就「換」;宏"1;第一步換為area=r*r;
正確的宏定義是#define
S(r)
(r)*(r);
宏名和參數的括弧間不能有空格;
宏替換只作替換:
#define
宏名(參數表)
字元串;
例如、值傳遞:
#define
標識符
字元串;
其中的標識符就是所謂的符號常量,b)
a*b;
area=S(3:
(1)宏名一般用大寫;
(2)使用宏可提高程序的通用性和易讀性,也沒有類型轉換,第二步被換為area=3*2,而編譯工作的任務之一就是語法檢查:將宏名替換為字元串.帶參數的宏、做任何事情之前先要換,並且分配內存。
預處理(預編譯)工作也叫做宏展開;中永遠不包含宏。
(3)宏定義不分配內存;
(4)宏定義寫在函數的花括弧外邊;
,不做計算:
#define
PI
3,第二步被換為area=a+b*a+b:
(5)實參如果是表達式容易出問題:
#define
S(r)
r*r
area=S(a+b)。
即在對相關命令或語句的含義和功能作具體分析之前就要換;
類似於函數調用。
格式.1415926。
把程序中出現的PI全部換成3。
(6)可以用#undef命令終止宏定義的作用域。
(7)宏定義可以嵌套。
(8)字元串",變數定義分配內存,通常在文件的最開頭。1415926說明,也稱為「宏名」,簡稱「宏」、宏替換。
2. 宏替換是在程序編譯時完成的,不佔用程序運行時間
是正確的,編譯時預處理,不分配內存空間
3. C語言中宏替換占不佔用運行時間
1.
宏替換不佔用運行時間。宏替換是在編譯時,編譯器完成的。佔用編譯時間。
2.
編譯時,編譯器會將代碼中的宏用對應定義好的代碼進行直接替換,然後再對源代碼進行編譯。
3.
所以宏比函數在運行時更快,因為它不用像函數調用時,要對現有數據進行入棧保存,運行完後,在出棧恢復;它是直接編譯好的代碼。
4. C語言宏定義效率問題
先回答你第二個問題編程編程就是要生成程序 把你寫的代碼變成程序的過程就是編譯 代碼本身就是一堆文字而已運行就是你執行這個程序第一個問題宏定義不是什麼都能做的 它跟函數有本質區別如果功能不復雜而且可以用宏定義實現的話那一般是宏定義效率更高因為調用函數要有參數壓棧 過程記錄保存 返回 過程記錄的返回等額外開銷不過這里你可能會產生一點誤解 我也給你講不了了 沒辦法 慢慢積累吧
5. 譚浩強的書上說宏替換不佔運行時間,只佔編譯時間,可宏替換不是在預處理時就解決了么不會佔用編譯時間吧
不佔用
程序從源碼到可執行文件,主要包括以下幾個過程:預處理器進行預處理(預處理器),接著有時候可能進行預編譯,接著是編譯(編譯器),接著是連接(連接器)(產生可執行文件)。不過現在的好多集成平台都把前面三步放到一起了。
6. 宏替換只是字元替換,不佔用編譯時間是不是正確
宏是在預編譯期間進行的,將代碼中的指定字元轉換
轉換結束後,再進行編譯
所以不佔用編譯時間
7. c語言中 關於預處理和宏替換是否編譯編譯
宏不會被compiler直接作為代碼編譯,你可以把它理解為一種編譯器處理源代碼的方式,比如#define CONST_NUM 10這樣,後面代碼里所有用CONST_NUM的地方都會在編譯時被替換成10這個數,預處理呢,根據你定義的不同宏,比如定義了DEBUG,後面有兩大段代碼,
#ifdef DEBUG
XXX
#else
XXX
#endif
控制編譯器具體去編譯代碼文件里的那部分代碼這樣,個人理解,希望能對你有些幫助。
8. c語言,說宏展開是在編譯時進行的,啥意思啥叫編譯時進行的
c語言編寫出來的代碼叫源代碼,是供人看的,如果想讓機器執行,需要轉換成機器語言,這個轉換過程就叫編譯。
在c語言中定義的宏,在編譯時,會展開(或叫替換)為實際的語句,如:
#define MAX 100
void main()
{
int a=MAX ;
printf("a=%d\n", a );
}
這里MAX是個宏,當編譯時,這段代碼就會變成:
void main()
{
int a=100; //這里的MAX會變成100
printf("a=%d\n", a );
}
這就是宏展開、宏替換,然後編譯器,按這樣子的源代碼進行編譯,生成執行程序
9. 在下列有關宏替換的敘述中,正確的說法是 A)宏替換佔用運行時間
宏名用大寫字母表示只是個習慣,大小寫都行;
宏替換不佔用運行時間,只佔編譯時間;因為宏替換發生在編譯預處理階段,預處理也是編譯工作的一部分。
宏名無類型;
宏替換只是字元替換;
帶參數的宏替換和函數不等價;
所以答案選D。
10. C語言:#define N 5 不佔用運行時間,那麼佔用編譯時間嗎
是滴。宏定義不佔運行時間,但佔用編譯時間。
宏是簡單的文本替換,函數調用有開銷的。 編譯鏈接後才能運行!