请问:这里的#define语句该如何理解呢?
#define CAMERA_BACKWARD_COMPATIBILITY_SET( aName, aID, aType ) \CyResult Set##aName( aTypeaValue ) { return SetParameter( aID, aValue ); }
#define CAMERA_BACKWARD_COMPATIBILITY_GET( aName, aID, aType ) \
CyResult Get##aName( aType& aValue ) const { return GetParameter( aID, aValue ); }
#define CAMERA_BACKWARD_COMPATIBILITY( aName, aID, aType ) \
CAMERA_BACKWARD_COMPATIBILITY_SET( aName, aID, aType ) \
CAMERA_BACKWARD_COMPATIBILITY_GET( aName, aID, aType )
此处有3行,到底哪个替代哪个呢? 三个都定义, \ 貌似是续行符。其实只有一行。
CAMERA_BACKWARD_COMPATIBILITY_SET、CAMERA_BACKWARD_COMPATIBILITY_GE肯定在其他地方被define了吧?把CAMERA_BACKWARD_COMPATIBILITY_SET、CAMERA_BACKWARD_COMPATIBILITY_GE换成define后的结果,再看这代码就知道结果了。
ps。仅个人看法。期待某楼神人出现拍砖 回复【2楼】Comedian
\ 貌似是续行符。其实只有一行。
camera_backward_compatibility_set、camera_backward_compatibility_ge肯定在其他地方被define了吧?把camera_backward_compatibility_set、camera_backward_compatibility_ge换成define后的结果,再看这代码就知道结果了。
ps。仅个人看法。期待某楼神人出现拍砖
-----------------------------------------------------------------------
楼主位已经补充
如果只是宏替换一个函数,我可以理解,问题是这里有3行,等于前面替换后面2行,等于替代2个函数,就费解了 回复【3楼】68336016
-----------------------------------------------------------------------
根据你在楼主位补充的内容看来:
CAMERA_BACKWARD_COMPATIBILITY_SET( aName, aID, aType )被替换成一个函数
CyResult Set##aName( aTypeaValue )
{
return SetParameter( aID, aValue );
}
函数的返回类型是CyResult,函数名是Set##aName(##表示连接),函数的形参是aType、aValue,函数的功能是return SetParameter( aID, aValue );。
同理CAMERA_BACKWARD_COMPATIBILITY_GET( aName, aID, aType )被替换成另一个函数
CyResult Get##aName( aType& aValue ) const
{
return GetParameter( aID, aValue );
}
那么CAMERA_BACKWARD_COMPATIBILITY( aName, aID, aType )就被替换成这两个函数。也就是遇到CAMERA_BACKWARD_COMPATIBILITY( aName, aID, aType ),相当于写了
CyResult Set##aName( aTypeaValue )
{
return SetParameter( aID, aValue );
}
CyResult Get##aName( aType& aValue ) const
{
return GetParameter( aID, aValue );
}
不知道我说的对不对?但是有一点,#define仅仅是文本替代,本着这个原则应该就像上面这样理解的。
页:
[1]