導航:首頁 > 源碼編譯 > 宏定義停止編譯

宏定義停止編譯

發布時間:2025-06-27 20:52:19

1. 預處理命令的宏定義

1.不帶參數的宏定義:
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define標識符文本
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為文本(這個文本可以是字元串、可以是代碼等)。
掌握宏概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中全部的標識符PI換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)可以用#undef命令終止宏定義的作用域
(4)宏定義可以嵌套
2.帶參數的宏:
除了一般的字元串替換,還要做參數代換
格式:
#define 宏名(參數表)文本
例如:#define S(a,b) a*b
area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;
類似於函數調用,有一個啞實結合的過程:
(1)實參如果是表達式容易出問題
#define S(r) r*r
area=S(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;
正確的宏定義是#define S(r) ((r)*(r))
(2)宏名和參數的括弧間不能有空格
(3)宏替換只作替換,不做計算,不做表達式求解
(4)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存
(5)宏的啞實結合不存在類型,也沒有類型轉換。
(6)宏展開使源程序變長,函數調用不會
(7)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)

2. Verilog的編譯指令

Verilog編譯指令詳解

編譯指令包括 `celldefine 和 `endcelldefine、default_nettype、`define 和 `undef、`ifdef、`else、`elsif、`endif、`ifndef、`include、`timescale、`unconnected_drive、`nounconnected_drive、`begin_keywords、`end_keywords、`pragma。

`celldefine 和 `endcelldefine 用於定義和結束宏定義。

`default_nettype 編譯指令用於設置默認的網線類型,選項包括 auto、wire、reg、bipol、mem。

`define 和 `undef 分別用於定義和取消宏定義。

`ifdef、`else、`elsif、`endif、`ifndef 與C語言中的同名指令類似,用於條件編譯。

`include 用於在源文件中包含另一個文件,可插入宏定義或函數,方便代碼管理。

`timescale 用於設置模擬的時間單位和精度。

`unconnected_drive 和 `nounconnected_drive 分別用於指定未連接埠的默認上拉或下拉狀態。

`begin_keywords 和 `end_keywords 用於定義代碼塊的開始和結束。

`pragma 是一條改變Verilog源程序解釋的指令,但具體作用未知。

Verilog中的編譯指令各有用途,合理使用可提高代碼的可維護性和可讀性。

3. c語言中的「宏」是指什麼

是一種批量處理的稱謂。計算機科學里的宏是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式。

「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。
計算機語言如C語言或 匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。

在Objective-C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,被定義為宏的標識符稱為宏名。在編譯預處理時,對程序中所有出現的宏名,都用宏定義中的字元串去替換,這稱為宏替換或宏展開。

宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。在Objective-C語言中,宏分為有參數和無參數兩種。

(3)宏定義停止編譯擴展閱讀

A類宏是用G65 Hxx P#xx Q#xx R#xx或G65
Hxx P#xx Qxx
Rxx格式輸入的,xx的意思就是數值,是以um級的量輸入的,比如你輸入100那就是0.1MM #xx就是變數號,變數號就是把數值代入到一個固定的地址中,固定的地址就是變數。

一般OTD系有#0~#100~#149~#500~#531.關閉電源時變數#100~#149被初始化成「空」,而變數#500~#531保持數據。我們如果說#100=30那麼現在#100地址內的數據就是30了。

B類宏能完成某一功能的一系列指令像子程序那樣存入存儲器,用戶可以設定M、S、T、G代碼調用它們,使用時只需給出這個指令代碼就能執行其功能,也可以像調用子程序一樣使用。

4. C#必備知識之預編譯指令

預編譯又稱為預處理 是做些代碼文本的替換工作 處理#開頭的指令 比如拷貝#include包含的文件代碼 #define宏定義的替換 條件編譯等 就是為編譯做的預備工作的階段 主要處理#開始的預編譯指令

下面對C#中的預編譯指令進行介紹

#define和#undef

用法

#define DEBUG

#undef DEBUG

#define告訴編譯器 我定義了一個DEBUG的一個符號 他類似一個變數 但是它沒有具體的值 可以將它看為一個符號而已 #undef就是刪除這個符號的定義 如果符號DEBUG沒定義過 則#undef不起作用 否則#define不起作用 二者都必須放在源代碼之前 二者的順序看代碼的順序

#define DEBUG

#undef DEBUG

這樣的話 DEBUG是沒有定義的 如果二者換個順序 編譯器就認為DEBUG被定義了

#if #elif #else #endif

這個告訴編譯器進行編譯代碼的流程式控制制 考慮下面代碼

#if DEBUG Console Write( debug );#elif RELEASE Console Write( realse );#else Console Write( other );#endif

以上代碼就是說如果定義了DEBUG則輸出debug 定義了RELEASE 則輸出realse 否則輸出other 如果定義了DEBUG和REALSE會怎麼樣呢?各位可以自己試一下

#warning #error

通過這兩個指定可以告訴編譯器 出一個警告還是錯誤信息 除了錯誤信息以後 編譯將停止

參考下面的代碼

#if DEBUG 〉該DEBUG如果選中當前狀態為DEBUG 則這個默認為#define #warning 現在是Ddbug狀態 #elif RELEASE 〉如果選中release狀態的話 這個確沒有默認 不知道我試驗的對不對 #warning 現在是Realse狀態 #else #error 並清楚什麼狀態 #endif

#region 和#endregion

這個兩個用來組成代碼塊

#line (這個指定的使用不太明白 參考MSDN)

這個指令可以改jian變編譯器在警告和錯誤信息中顯示的文件名和行號信息 用#line default把行號恢復為默認的行號

下面的示例說明如何報告與行號關聯的兩個警告 #line 指令迫使行號為 (盡管默認值為 # ) 另一行 (# ) 作為默認 #line 指令 的結果跟在通常序列後

示例

// preprocessor_line cspublic class MyClass { public static void Main() { #line int i; // CS on line #line default char c; // CS on line }}

示例

下面的示例說明調試器如何忽略代碼中的隱藏行 運行此示例時 它將顯示三行文本 但是 當設置如示例所示的斷點並按 F 鍵逐句通過代碼時 您將看到調試器忽略了隱藏行 另請注意 即使在隱藏行上設置斷點 調試器仍會忽略它

lishixin/Article/program/net/201311/15246

5. c語言宏定義如何用用宏定義有什麼優點

用#define 來定義,如#define Max 100
優點:在以後的程序中 要修改Max的大小 不用跑到程序中找 直接修改
#define Max 的大小即可。很方便。

閱讀全文

與宏定義停止編譯相關的資料

熱點內容
51單片機SPWM逆變器 瀏覽:620
theisle怎麼看伺服器人數 瀏覽:278
shell運行linux命令 瀏覽:502
安卓電視版什麼意思 瀏覽:603
什麼app錄音可以循環播放 瀏覽:560
如何投屏游戲安卓 瀏覽:644
android百度地圖集成 瀏覽:77
200m寬頻演算法 瀏覽:821
怎麼把相冊命名為空文件夾 瀏覽:946
翻新二手車解壓 瀏覽:693
公鑰加密私鑰加密流程圖 瀏覽:498
蘋果手機看本地視頻用什麼app 瀏覽:299
為什麼某app打不開 瀏覽:389
看國內行業板塊行情用什麼app 瀏覽:692
啟動ftp命令linux 瀏覽:996
javades加密解密演算法 瀏覽:862
預約上門系統源碼 瀏覽:206
加密列印機介面可以轉usb嗎 瀏覽:486
哪些程序員有滑鼠手 瀏覽:593
單片機維修視頻講解 瀏覽:126