当前位置: 技术问答>linux和unix
请高手看一下这个宏是什么意思?小弟谢了!
来源: 互联网 发布时间:2016-04-20
本文导语: // NAME VALUE(FCC) STRING OPTION(Bitrate) //----------------------------------------------------------------------------------------------- #define ENUM_CODEC(_) _(Co...
// NAME VALUE(FCC) STRING OPTION(Bitrate)
//-----------------------------------------------------------------------------------------------
#define ENUM_CODEC(_)
_(Codec_Unknown , = ( 'unkn' ), _T("Other"), (CODEC_BITRATE_NA))
_(Codec_IMX_30, = ( 'imx3' ), _T("IMX 30Mbps"), (30000000))
_(Codec_IMX_40, = ( 'imx4' ), _T("IMX 40Mbps"), (40000000))
_(Codec_IMX_50, = ( 'imx5' ), _T("IMX 50Mbps"), (50000000))
_(Codec_DV_25, = ( 'dv25' ), _T("DV 25Mbps"), (25000000))
_(Codec_DV_50, = ( 'dv50' ), _T("DV 50Mbps"), (50000000))
_(Codec_HDCAM, = ( 'hcam' ), _T("HDCAM"), (CODEC_BITRATE_NA))
//问题一: 请问以上的宏是什么意思?
//问题二: 下面是调用这个宏的在G++调试时出错:"warning:multi-character character constant"
// 我试着把( 'unkn' ) 变为:( "unkn" )也不对,请问应该怎样改?
DEFINE_CUSTOMEX_ENUM(Codec, ENUM_CODEC)
//DEFINE_CUSTOMEX_ENUM宏的定义如下:
// FOR (name, value, string, option) LIST FORMAT.
#define DEFINE_CUSTOMEX_ENUM(name, list)
typedef enum tag_##name{
list(ENUM_CUSTOMEX_BODY)
}name;
//-----------------------------------------------------------------------------------------------
#define ENUM_CODEC(_)
_(Codec_Unknown , = ( 'unkn' ), _T("Other"), (CODEC_BITRATE_NA))
_(Codec_IMX_30, = ( 'imx3' ), _T("IMX 30Mbps"), (30000000))
_(Codec_IMX_40, = ( 'imx4' ), _T("IMX 40Mbps"), (40000000))
_(Codec_IMX_50, = ( 'imx5' ), _T("IMX 50Mbps"), (50000000))
_(Codec_DV_25, = ( 'dv25' ), _T("DV 25Mbps"), (25000000))
_(Codec_DV_50, = ( 'dv50' ), _T("DV 50Mbps"), (50000000))
_(Codec_HDCAM, = ( 'hcam' ), _T("HDCAM"), (CODEC_BITRATE_NA))
//问题一: 请问以上的宏是什么意思?
//问题二: 下面是调用这个宏的在G++调试时出错:"warning:multi-character character constant"
// 我试着把( 'unkn' ) 变为:( "unkn" )也不对,请问应该怎样改?
DEFINE_CUSTOMEX_ENUM(Codec, ENUM_CODEC)
//DEFINE_CUSTOMEX_ENUM宏的定义如下:
// FOR (name, value, string, option) LIST FORMAT.
#define DEFINE_CUSTOMEX_ENUM(name, list)
typedef enum tag_##name{
list(ENUM_CUSTOMEX_BODY)
}name;
|
好像是这样的O(∩_∩)O
u = 117 等于二进制 1110101
n = 110 等于二进制 1101110
k = 107 等于二进制 1101011
n = 110 等于二进制 1101110
结果为 1970170734
等于二进制
1110101 0 1101110 0 1101011 0 1101110
u n k n
|
lz 用 gcc -E xxx.c 就可以看到预处理后的结果了
之后的代码错误比较容易找了
_ 就是参数,与一般的写法没啥区别,只是简化为 _ 而已
之后的代码错误比较容易找了
_ 就是参数,与一般的写法没啥区别,只是简化为 _ 而已
|
不用 -Werror 选项的话,可以忽略的
|
#define DEFINE_CUSTOMEX_ENUM(name, list)
typedef enum tag_##name{
list(ENUM_CUSTOMEX_BODY)
}name;
调用的时候是 DEFINE_CUSTOMEX_ENUM(Codec, ENUM_CODEC)
list