首页 > 编程知识 正文

宏定义可以赋值吗,verilog宏定义格式

时间:2023-05-05 11:55:55 阅读:155705 作者:2048

宏定义是c语言提供的三种预处理功能之一,包含宏定义、文件包含、条件编译。

宏定义和操作符的区别:宏的定义是置换,既不计算也不求解公式。 宏的定义也称为宏置换、宏置换,简称“宏”。 在c语言中,宏是生成嵌入代码的唯一方法。 在嵌入式系统中,宏是一种很好的代替函数的方法来满足性能要求。

宏定义的格式:#DEFINE标识符字符串

掌握"宏观"概念的关键是"交换"。 一切都是以交换为前提,做什么之前必须交换。 在正确理解之前必须“交换”。 这意味着,在具体分析相关命令或句子的含义或功能之前,必须进行交换。

定义宏需要注意以下几点:

)1)宏名称一般使用大写字母

)2)使用宏可以提高程序的通用性和可读性,减少不一致性,减少输入错误,便于修改。 例如,数组大小的一般宏定义;

)3)预处理是编译前的处理,但是编译工作的任务之一是语法检查,预处理不进行语法检查。

)4)宏观定义末尾的不加分

(5)宏定义写在函数大括号外,作用域为后续程序,通常位于文件开头;

(6)可以使用#undef命令终止宏定义的范围;

(7)宏观定义允许嵌套

(8)字符串)“)中绝对不包含宏;

(9)宏定义不分配内存,变量定义分配内存;

(10 )宏的定义没有类型问题,其参数也是无类型的。

在c语言/c类区域设置中,宏的作用如下:

1.取代Magic Number

这个作用在嵌入式开发时太重要了。 如果SoC 50多页的datasheet、上百个寄存器的位操作、语义宏的定义不清晰,查步骤查手册绝对是崩溃的节奏!

2.防止重复定义

#ifndef XXXX

#define XXXX

#endif

3.快速控制代码编译

#define SIMULATION_DEBUG 1

#if SIMULATION_DEBUG

使用精简数据

#else

实时数据

#endif

4.编译系统控制链

某些系统可以将宏定义传递给编译器,并通过编译脚本(makefile )控制编译选项。 例如,可以结合上述代码在makefile中定义。

cdefines=$(cdefines )/SIMULATION_DEBUG

说到编译,还应该提到ANSI C中预定义的几个非常有用的编译宏。

• _ L I N E _

• _ F I L E _

• _ D A T E _

• _ T I M E _

• _ S T D C _

例如

#definedebugmsg(msg,date ) printf ) msg;

printf(「%d%d%d”,date,_LINE_,_FILE_ )

5.使用typedef

C语言中的typedef也是宏的定义。 c语言中的struct typedef函数指针会告诉你可以进行面向对象的继承、重载和多态性吗? (如果你感兴趣的话,可以看看MFC的源代码实现,把传统的C风格的Windows API进行各种包装装饰、包装。 )

typedefint(*pffunc1) ) int;

6.简化操作

得到一个字的高位字节和低位字节

#defineword_lo(xxx ) (byte ) ) word ) XXX ) 255 ) )

#defineword_hi(xxx ) ) byte ) ) word ) XXX )8) )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。