您好,登錄后才能下訂單哦!
小編給大家分享一下C語言中預處理的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
我們來看如下一段代碼
結果分別為12,11,13
當參數替換后,首先判斷表達式 (a++)>(b++)?,判斷后a的值加1 b的值加1,然后執行表達式(b++)此時執行的值為12,執行完成后b的值加1,則a的值為11,b的值為13。可以看出對于這種情況下的宏是帶有副作用的,可能會導致不可預料的結果
實現以下代碼,用函數好還是宏好?
1.用于調用函數和返回代碼的時間可能比這個小型計算所需的時間更多,所以宏在速度上和規模上更勝一籌
2.函數的參數必須聲明為特定的類型,所以函數只能在類型合適的表達式使用,而宏則與類型無關,所以如果比較浮點型時使用函數就會有警告
1.每次使用宏時,一段宏定義的代碼會插入到代碼中,除非宏比較短,否則將大幅增加代碼的長度
2.由于存在信息差,宏是沒辦法調試的。我們看到的是宏定義的名字,而實際運行是宏定義的代碼。例:
看似代碼沒錯,但實際上是因為無法調試宏而找不出錯誤。
3.宏由于與類型無關,也就不夠嚴謹
4.宏可能帶來運算符優先級的問題,容易導致結果出錯
__FILE__
進行編譯的源文件
__DATE__
文件被編譯的日期
__TIME__
文件被編譯的時間
__LINE__
文件當前的行號
__STDC__
若編譯器遵循ANSI C標準 則值為1,否則未定義
#define
宏定義
#undef
撤銷已定義宏名
#include
使編譯程序將另一源文件嵌入到帶有#include的源文件中
#ifdef
如果定義
#ifndef
如果未定義
#endif
預處理指令為上述以及其他#開頭的指令
能夠讓語句選擇編譯或者放棄
常用于調試性的代碼,刪除可惜,保留又礙事,或者防止重復頭文件多次編譯
若未定義,則不會編譯其中的代碼
還可以用#pragma once
以上是“C語言中預處理的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。