#define 宏定义相关的疑问?求助 5C

#define 下面这个宏定义什么意思?
typedef uint8 Com_IpduIdType;
#define CONST(type, memclass) const type
CONST(Com_IpduIdType ,COM_CONST) Com_Prv_xIPduGrp_IpduRefCfg_au8[84] =
{
x1,
x2,
x3
};

这个宏定义memclass参数是用来做什么(其实COM_CONST也是个宏定义:#define COM_CONST ,没有替代值),看着像分类用?可是并没有看到函数里面用呀,编译的时候会如何展开?
看起来这个函数最终实现的是Com_Prv_xIPduGrp_IpduRefCfg_au8[]定义为uint8的 常量类型呀

c

7个回答

define 是KEIL中预处理命令,作为define后面字串的文本代替,一般没有定义硬件的特性,,在使用时,前面必须加上 # 号,编译器在编译时,先查找代码中的宏定义自串,然后在用在宏后面的数据去替代,例子:
#define pi 3.1415926
(以后使用中,可以用pi来代替3.1415926)
在使用define定义宏的时候,是没有数据类型指定的,而在调用的时候被相关数据类型转换。

u012923751
bangbang170 对的,我也这么认为
一年多之前 回复

define宏定义只要为了简化代码编写量,这些定义在预编译时都会被编译机器替换。你如果不确定详细定义,直接查看预编译生成的源文件,替换的很清楚。

GCC常用命令
http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html

autosar里有很多不引用的宏定义参数,用来标识用的,毕竟autosar是面向众多主机厂和零部件厂的,看似画蛇添足的编程风格其实是方便应对零部件厂给多客户供货的。

给你一个世纪应用的例子吧,变量或返回值宏定义指明类型和对应模块的使用技巧,
举例说明,常变量
typedef usigned char uint8;
typedef uint8 adc_channeltype;
#define CONST(constype,memclass) const constype
STATIC CONST(adc_ChannelType,ADC_CONST)
AdcGroup_10_Assignment_PB_2__1[4]=
{
AdcGroup_10
0U,
1U,
2U,
3U,
};
//Adc_ChannelType表明数组元素为ADC通道类型,属于ADC模块的常变量

看起来像AUTOSAR 代码?memclass 宏参数确实不会对编译结果产生影响,我的理解这个参数是为了给人看的,只是为了标识这个数据类型是Com的const类型。

Aasdfghjkl123_
Aasdfghjkl123_ 文本代替的意思 如 π
一年多之前 回复
gyb694824823
小小峰逍遥 厉害,确实是autosar代码。那这个参数相当于一个函数的参数与而已,没有进行任何处理?那问题又来了,#define DISP ; DISP UInt8 iud_2Wheel = 0; 这个 宏定义DISP 也没有替代值,但是属来分类的,这里表示是观测类。是不是没有替代值的宏定义,默认为0:
一年多之前 回复
gyb694824823
小小峰逍遥 厉害,确实是autosar代码。那这个参数相当于一个函数的参数与而已,没有进行任何处理?
一年多之前 回复

#define A 12345

举例就是这么用,往下的代码用到12345这个数的时候可以直接用A代替,方便一些常用量的修改

你说的很对, 这个写法并不可取, 对 CONST(type, memclass) 这个宏没有起到一个很好的直观操作引用作用, 建议不要这么写。 希望采纳哦 。

gyb694824823
小小峰逍遥 但是呢有这种情况:#define DISP ; DISP UInt8 iud_2Wheel = 0; 这个 宏定义DISP 也没有替代值,但是属来分类的,这里表示是观测类。是不是没有替代值的
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问