肥乡县手控报警器有限公司

热门关键词: 手控报警器,无线报警器,机箱报警器

单片机C语言中define的妙用

日期:2020-02-13编辑作者:公司产品

  最近一款产品调试时发现了问题,在一起检查一个小伙伴的C程序。问题不大,但暴露了一点问题。

  可是你能一下子看出来第5和第2位置1吗?其实应该是0x24,他并没有发现这个错误,算错了,所以正确的是:

  打开我们编译器自带的头文件,比如AVR Tiny13头文件中有如下语句:

  这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。

  这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。

  在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了

  这是应该使用typedef来代替define,diy 汽车 防盗报警器这样a和b就都是int型指针了。

  define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

  5.在大规模的开发过程中,diy 汽车 防盗报警器特别是跨平台和系统的软件里,define 最重要的功能是条件编译。

  由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。

  前些一段时间在看WinCE的Code时发现在宏定义中有用到##,如下所示

  在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。

  这个没在标准上看到。上述测试是在VS studio环境下做的。不知道GCC中是否有同样的用法。

  1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:

  作用都是用int_ptr代表 int* ,但是二者不同,正如前面所说,#define在预处理时进行简单的替换,而typedef不是简单替换,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

  pint是一种指针类型 const pint p 就是把指针给锁住了p不可更改

  4)还应经注意到#define 不是语句不要在行末加分号,否则会连分号一块置换。

本文由肥乡县手控报警器有限公司发布于公司产品,转载请注明出处:单片机C语言中define的妙用

关键词:

验厂审核中要求工厂安装烟雾报警器有必要嘛?

可选中1个或多个下面的关键词,搜索相关资料。也可直接点搜索资料搜索整个问题。 展开全部您好,我们工厂也是的...

详细>>