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

define与typedef

在嵌入式开发中经常会用到宏定义define和typedef,它们俩在使用上有些类似,容易混淆,那么他们有什么区别呢? 1....二者的本质 #define是宏定义,它是一种预处理命令,在预处理的时候进行简单的文本替换操作,其表达式一般如下: #define 标识符 字符串 /*宏定义结尾不加;*/ 在预处理时会把自己定义的标识符替换为宏定义中的字符串...,比如: #define PI 3.14 这个宏定义的作用是把代码中的PI替换为3.14,在程序中遇到PI就可以把他看作3.14这个常数(前提是在宏定义的作用域内)。...* @retval None */ #define assert_param(expr) ((expr) ?...assert_failed函数在库中只有声明,没有定义,需要用户自己根据实际开发需要去实现其功能,该函数的两个参数分别是调用assert_failed函数(即参数不合法)的文件的文件名和行号,可以通过该函数打印参数不合法的文件及不合法的行号位置

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

    #define 以及##

    #define定义标示符 #define定义标示符就是将一个名称起一个别名,在程序运行之前使用别名将原来的名字替换掉,从而达到简化代码书写的作用 #define的语法 define name stuff...name是别名,stuff是原本的名称 #define NUM 120 #define STR "abcdef" int main() { printf("%d\n", NUM + 10);...printf("%s", STR); return 0; } 其实#define就是将NUM 和 STR 简单的进行了转换,再进行计算即可 define也可以将复杂的符号进行简单的替换...int a = 0; return 0; } 注意:#define 后面最好不要加上分号,避免不必要的错误 #define定义宏 宏的声明方式 define name( parament-list...define只是进行了简单的替换,并不会进行运算 #define ADD(x) x+x #define MUL(x) x*x int main() { int ret = ADD(2);

    64321

    CC++中----->#define定义函数和自定义函数各方面比较

    #define定义函数和自定义函数各方面比较 代码长度 #define宏:每次使用时,宏代码都被插入到程序中。...除了非常小的宏之外,程序的长度将大幅度增长 函数函数代码只出现于一个地方:每次使用这个函数时,都调用那个地方的同一份代码 执行速度 #define宏:更快 函数: 存在函数调用、返回的额外开销 操作符优先级...参数求值 #define宏:参数用于宏定义时,每次都将重新求值,由于多次求值,具有副作用的参数可能会产生不可预测的结果。...参数类型 #define宏:宏与类型无关,只要参数的操作是合法的,它可以用于任何参数类型。 函数函数的参数是与类型有关系的,如果参数的类型不同,就需要使用不同的函数,即使它们执行的任务是相同的。...总的来说#define定义函数优缺点如下: 优点:可完成函数调用的功能,对输入参数没有限制,又能减少系统开销,提高运行效率。因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。

    1.4K20

    C++避坑之#define常量和形似函数的宏

    我们不妨将func1的实现放在main函数之后,看看有什么结果,如下例所示: #include #include using namespace std; #define...确实是按照顺序来全局进行替换,初始定义A的值为10,因此main函数中的A和func2中的A均被替换为10,而最后在处理到func1的函数体的时候,A重新被定义为20,所以func1中的A被替换为20。...因此,在C++中我们尽量避免使用#define来定义一个常量,应使用const和enum来定义常量。 尽量避免形似函数的宏 #define的另外一个需要注意的地方就是,尽量减少形似函数宏的使用。...同时,因为我们使用了函数,因此也遵守了作用域和访问的规则,使得我们的代码更具标准性和规则性。 总结 在C++中,尽量避免#define常量和形似函数宏的使用。...引用《Effective C++》中的话来做总结就是: 对于单纯常量,最好以const对象和enum替换#define。 对于形似函数的宏,最好改用inline函数替换#define

    30210

    C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)

    当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。​ 七、宏与函数的对比​ 宏通常被应用于执行简单的运算。...#define MAX(a, b) ((a)>(b)?(a):(b)) 那为什么不用函数来完成这个任务? 原因有二: 1....用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。 2. 更为重要的是函数的参数必须声明为特定的类型。...所以函数只能在类型合适的表达式上使用。反之,这个宏怎可以适用于整形、长整型、浮点型等可以用于 > 来比较的类型。宏是类型无关的。 和函数相比宏的劣势: 1....宏有时候可以做函数做不到的事情。比如:宏的参数可以出现类型,但是函数做不到。

    66310

    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); //...dypedef定义数组 typedef double arr[3];//arr就是一个长度为3的double类型数组 arr arr1; //相当于 double arr1[3] //用dypedef定义函数指针...typedef void (*fun)();//表示fun是一个指向 void类型的指针函数 void StrGet() { qDebug()<<"str"; } fun f1=StrGet...; f1(); 2.区别 执行时间不一样     #define 是在预处理阶段,也就是在编译之前进行替换工作     typedef 是在编译阶段,会进行类型检查 作用域不同     #define

    1.1K70

    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

    【C语言】#define的认识

    4.宏函数的对比 宏通常被应⽤于执⾏简单的运算。 ⽐如在两个数中找出较⼤的⼀个时,写成下⾯的宏,更有优势⼀些。 #define MAX(a, b) ((a)>(b)?...(a):(b)) 那为什么不⽤函数来完成这个任务? 原因有⼆: 1. ⽤于调⽤函数和从函数返回的代码可能⽐实际执⾏这个⼩型计算⼯作所需要的时间更多。...所以宏⽐函数在程序的规模和速度⽅⾯更胜⼀筹。 2. 更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使⽤。...## 被称 为记号粘合 举个例子: 这⾥我们想想,写⼀个函数求2个数的较⼤值的时候,不同的数据类型就得写不同的函数。...// 替换到宏体内后 float##_max ⽣成了新的符号 float_max 做函数名 在实际开发过程中##使⽤的很少. 6.命名约定 ⼀般来讲函数的宏的使⽤语法很相似。

    11810

    const与#define的区别、优点

    const与#define的区别 编译器处理方式不同 define宏是在预处理阶段展开。 补充:预处理器根据以#开头的命令,修改原始的程序。...咱们的#define也是,仅仅是单纯的文本替换。 const常量是编译运行阶段使用。 类型和安全检查不同 define宏没有数据类型,不做任何类型检查,仅仅是展开。...const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝...define是不能进行调试的,因为在预编译阶段就已经替换掉了。 const优点 const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。...#define的优点 宏可以定义一些函数,const不可以 宏可以使代更码简洁 使用宏可以方便代码维护 宏还可以定义带参数的宏,做到一定程度的泛型(利用#或者##操作符)

    1.7K10
    领券