首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

define与typedef

在嵌入式开发中经常会用到宏定义define和typedef,它们俩在使用上有些类似,容易混淆,那么他们有什么区别呢? 1....二者的本质 #define是宏定义,它是一种预处理命令,在预处理的时候进行简单的文本替换操作,其表达式一般如下: #define 标识符 字符串 /*宏定义结尾不加;*/ 在预处理时会把自己定义的标识符替换为宏定义的字符串...,比如: #define PI 3.14 这个宏定义的作用是把代码的PI替换为3.14,在程序遇到PI就可以把他看作3.14这个常数(前提是在宏定义的作用域内)。...断言 断言一般会用做函数入口参数的有效性判断,在STM32的HAL库中就有很多应用,比如在STM32F429断优先级分组配置函数(此处只说断言应用,不对STM32F429的中断分组做过多讨论): void...* @retval None */ #define assert_param(expr) ((expr) ?

6010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ #define详解

    在编译预处理时,对程序中所有出现的“宏名”,都用宏定义的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序的宏定义命令完成的。宏代换是由预处理程序自动完成的。...其定义的一般形式为: #define 标识符 字符串 其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。...(“s=%d\n”,s); } 复制代码   上例程序首先进行宏定义,定义M来替代表达式(a+b),在 s= M * M 作了宏调用。...在宏定义的参数称为形式参数,在宏调用的参数称为实际参数。对带参数的宏,在调用,不仅要宏展开,而且要用实参去代换形参。...a:b,形参a,b均出现在条件表达式。程序第七行max=MAX(x,y)为宏调用,实参x,y,将代换形参a,b。宏展开后该语句为: max=(x>y)?x:y; 用于计算x,y的大数。

    1.7K10

    C++inline和#define的区别总结

    在C++,inline 和 #define 都用于代码优化,但它们的实现方式和功能有所不同。inlineinline 是一个函数修饰符,在函数定义前加上该关键字可以告诉编译器将该函数内联展开。...#define#define 是一个预处理指令,在编译阶段对代码进行文本替换。通过 #define 定义常量、宏等可以简化代码并且提高可读性。...使用 #define: 在需要定义常量或宏等时使用。...使用方式: 宏定义define只要定义了就会替换,而inline只是建议,编译器可以拒绝替换,在函数较大的时候,编译器可以选择不展开相应的函数。...最后还要提醒一点:inline关键字必须在函数定义处,位于函数声明处则无效,因此一般将公共的inline函数的定义写在头文件。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    19710

    CC++define定义的常量与const常量

    常量是在程序不能更改的量,在C/C++中有两种方式定义常量,一种是利用define宏定义的方式,一种是C++中新提出来的const型常变量,下面主要讨论它们之间的相关问题; define定义的常量:...  define是预处理指令的一种,它用来定义宏,宏只是一个简单的替换,将宏变量所对应的值替换,如下面的代码: #define NUM 2 int main() { printf("%d", NUM...这个关键字保证每次在使用变量时都去内存读取。 我们可以总结出const和define的几个不同之处: 1)define是一个预处理指令,const是一个关键字。...2)define定义的常量编译器不会进行任何检查,const定义的常量编译器会进行类型检查,相对来说比define更安全 3)define的宏在使用时是替换不占内存,而const则是一个变量,占内存空间...4)define定义的宏在代码段不可寻址,const定义的常量是可以寻址的,在数据段或者栈段

    1.7K10

    PHPdefine() 与 const定义常量的区别详解

    本文实例讲述了PHPdefine() 与 const定义常量的区别。分享给大家供大家参考,具体如下: 前言 今天在Stackoverflow又看到一个很有趣的文章,所以翻译过后摘了过来。...文章是由PHP开发成员之一的NikiC写的,权威性自然毋庸置疑 正文 在PHP5.3,有两种方法可以定义常量: 使用const关键字 使用define()方法 const FOO = 'BAR'; define...defined('FOO')) { define('FOO', 'BAR'); } const只能用来声明变量(如数字、字符串,或者true, false, null, _FILE_),而define...而define目前是不支持这一功能的,但是该功能会在PHP7被实现: const FOO = [1, 2, 3]; // 在PHP 5.6有效 define('FOO', [1, 2, 3]);...尤其是在使用define定义大量常量时,PHP的运行速度会变得非常慢。

    1K10

    #define宏的边际效应

    在C语言和C++,#define宏进行的字符替换,要注意边际效应: 举例: #define N 2+3 我们预想的N值是5,我们这样使用N,int a = N/2; 我们预想的a的值是2.5,可实际上...的值是3.5(这样说不太恰当,因为是取整,但为了说明先这样理解) 原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2;这就是宏定义的字符串替换的“边缘效应”,因此要如下定义:#define...N (2+3) 边际效应要用括号去完善 在C++,不如直接用const,const常量有数据类型,而宏常量没有数据类型。...而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 再来考察一题: #include #define N 3 #define Y(n) ((

    70420

    Oracle define用法简介教程

    本文链接:https://blog.csdn.net/u014427391/article/details/101052911 继上一篇博客Oracle绑定变量学习笔记,再写一篇define变量的简单教程...文章目录 1、define常量用法 2、&和&&符号用法 1、define常量用法 注意:define常被误解为定义变量,其实不然,define定义的是字符常量,define定义一下常量,然后用&或者...&&符号进行引用 环境准备,先建表来实验: create table t as select * from dba_object; define一个常量a,然后直接查询用&符号表示 SQL> define...,就明白了 这里不用define定义常量,直接用&和&&符号 SQL> select * from t where object_id = &b; 如图,会提示你输入值 ?...define字符类型的常量 如果define定义的字符类型的常量,引用时候要加上单引号 select * from t where object_name = '&a'; ?

    1.2K30

    typedef 和define的区别

    总结一下typedef和#define的区别 1.概念   #define 它在编译预处理时进行简单的替换,不作正确性检查。它是预处理指令。  ...例子: #define: #define DO double DO val =5;//相当于 double va =5; #define FUN(X) X+5 int va = FUN(3); //...fun是一个指向 void类型的指针函数 void StrGet() { qDebug()<<"str"; } fun f1=StrGet; f1(); 2.区别 执行时间不一样     #define...是在预处理阶段,也就是在编译之前进行替换工作     typedef 是在编译阶段,会进行类型检查 作用域不同     #define 无论在哪定义过,在其它的地都可以使用     typedef...只能在定义的作用域内使用 对指针的操作不一样 #define PINT int * typedef int * pint; int a =3; int b =5; const

    1.1K70

    【C语言】#define的认识

    #define定义宏 (1)定义 #define 机制包括了⼀个规定,允许把参数替换到⽂本,这种实现通常称为宏(macro)或定义宏 (define macro)。...3.宏替换的规则 在程序扩展#define定义符号和宏时,需要涉及⼏个步骤。 1. 在调⽤宏时,⾸先对参数进⾏检查,看看是否包含任何由#define定义的符号。...宏参数和#define 定义可以出现其他#define定义的符号。但是对于宏,不能出现递归。 2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。...⽐如在两个数找出较⼤的⼀个时,写成下⾯的宏,更有优势⼀些。 #define MAX(a, b) ((a)>(b)?(a):(b)) 那为什么不⽤函数来完成这个任务?...它仅允许出现在带参数的宏的替换列表。 #运算符所执⾏的操作可以理解为”字符串化“。

    11410

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券