Function 类函数宏定义

Function 类函数宏定义,function,c-preprocessor,Function,C Preprocessor,问题是,我不太明白下面的定义是什么。谁能给我解释一下吗 #define Vpc3MemSet_( _pToVpc3Memory, _bValue, _wLength )\ Vpc3MemSet( _pToVpc3Memory, _bValue, _wLength ) 你的宏几乎什么都不做。它用Vpc3MemSet(不带下划线)替换Vpc3MemSet(带下划线)。如果存在不同的、依赖于平台的变体(例如Linux、macOS和Windows),则此类宏通常是有意义的。对于(

问题是,我不太明白下面的定义是什么。谁能给我解释一下吗

#define Vpc3MemSet_( _pToVpc3Memory, _bValue, _wLength )\
           Vpc3MemSet( _pToVpc3Memory, _bValue, _wLength )

你的宏几乎什么都不做。它用
Vpc3MemSet
(不带下划线)替换
Vpc3MemSet
(带下划线)。如果存在不同的、依赖于平台的变体(例如Linux、macOS和Windows),则此类宏通常是有意义的。对于(虚构的)示例:

您可以使用相同的宏调用调用平台相关函数:

Vpc3MemSet_(memory, value, length);

这将扩展到Windows和Linux上的不同函数调用。这是整个#定义顺序:

#if VPC3_SERIAL_MODE


 #define CopyToVpc3_( _pToVpc3Memory, _pLocalMemory, _wLength )\
           CopyToVpc3( _pToVpc3Memory, _pLocalMemory, _wLength )

 #define CopyFromVpc3_( _pLocalMemory, _pToVpc3Memory, _wLength )\
           CopyFromVpc3( _pLocalMemory, _pToVpc3Memory, _wLength )

 #define Vpc3MemSet_( _pToVpc3Memory, _bValue, _wLength )\
           Vpc3MemSet( _pToVpc3Memory, _bValue, _wLength )

 #define Vpc3MemCmp_( _pToVpc3Memory1, _pToVpc3Memory2, _wLength )\
           Vpc3MemCmp( _pToVpc3Memory1, _pToVpc3Memory2, _wLength )

#else

 #define CopyToVpc3_( _pToVpc3Memory, _pLocalMemory, _wLength )\
           memcpy( _pToVpc3Memory, _pLocalMemory, _wLength )

 #define CopyFromVpc3_( _pLocalMemory, _pToVpc3Memory, _wLength )\
           memcpy( _pLocalMemory, _pToVpc3Memory, _wLength )

 #define Vpc3MemSet_( _pToVpc3Memory, _bValue, _wLength )\
           memset( _pToVpc3Memory, _bValue, _wLength )

 #define Vpc3MemCmp_( _pToVpc3Memory1, _pToVpc3Memory2, _wLength )\
           memcmp( _pToVpc3Memory1, _pToVpc3Memory2, _wLength )

#endif /* #if VPC3_SERIAL_MODE */
因此,这四个函数有两个定义,这取决于您是处于串行模式还是并行模式。但是,在应用程序源文件中调用memset()函数,如下所示:

 /*-----------------------------------------------------------------------*/
 /* init application data                                                 */
 /*-----------------------------------------------------------------------*/
  memset( &sDpAppl, 0, sizeof( sDpAppl ) );

 /*-----------------------------------------------------------------------*/
 /* initialize VPC3                                                       */
 /*-----------------------------------------------------------------------*/
 #if VPC3_SERIAL_MODE
  Vpc3AsicAddress = (VPC3_ADR)VPC3_ASIC_ADDRESS;
  pVpc3 = &sVpc3OnlyForInit;
  pDpSystem = &sDpSystemChannel1;

  memset( pVpc3, 0, sizeof( VPC3_STRUC ) );
#else
  pVpc3Channel1 = (VPC3_STRUC_PTR)VPC3_ASIC_ADDRESS;
  Vpc3AsicAddress = (VPC3_ADR)VPC3_ASIC_ADDRESS;
  pVpc3 = pVpc3Channel1;
  pDpSystem = &sDpSystemChannel1;
#endif//#if VPC3_SERIAL_MODE
好像这是一个不同的功能。或者,我还缺少什么吗?:/ 顺便说一下,我处于串行模式,并且已经定义了CopyToVpc3()、CopyFromVpc3()、Vpc3MemSet()、Vpc3MemCmp()

 /*-----------------------------------------------------------------------*/
 /* init application data                                                 */
 /*-----------------------------------------------------------------------*/
  memset( &sDpAppl, 0, sizeof( sDpAppl ) );

 /*-----------------------------------------------------------------------*/
 /* initialize VPC3                                                       */
 /*-----------------------------------------------------------------------*/
 #if VPC3_SERIAL_MODE
  Vpc3AsicAddress = (VPC3_ADR)VPC3_ASIC_ADDRESS;
  pVpc3 = &sVpc3OnlyForInit;
  pDpSystem = &sDpSystemChannel1;

  memset( pVpc3, 0, sizeof( VPC3_STRUC ) );
#else
  pVpc3Channel1 = (VPC3_STRUC_PTR)VPC3_ASIC_ADDRESS;
  Vpc3AsicAddress = (VPC3_ADR)VPC3_ASIC_ADDRESS;
  pVpc3 = pVpc3Channel1;
  pDpSystem = &sDpSystemChannel1;
#endif//#if VPC3_SERIAL_MODE