导航:首页 > 源码编译 > 宏定义停止编译

宏定义停止编译

发布时间: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 的大小即可。很方便。

阅读全文

与宏定义停止编译相关的资料

热点内容
奇瑞风云2空调压缩机多少钱 浏览:777
硬件加密芯片手机 浏览:343
什么app买东西便宜又好 浏览:552
运动app配速是什么 浏览:633
51单片机SPWM逆变器 浏览:621
theisle怎么看服务器人数 浏览:279
shell运行linux命令 浏览:503
安卓电视版什么意思 浏览:604
什么app录音可以循环播放 浏览:561
如何投屏游戏安卓 浏览:645
android百度地图集成 浏览:78
200m宽带算法 浏览:822
怎么把相册命名为空文件夹 浏览:947
翻新二手车解压 浏览:694
公钥加密私钥加密流程图 浏览:499
苹果手机看本地视频用什么app 浏览:300
为什么某app打不开 浏览:390
看国内行业板块行情用什么app 浏览:693
启动ftp命令linux 浏览:997
javades加密解密算法 浏览:863