C语言实现任意位置的参数默认值设置
程序员文章站
2024-03-18 08:45:40
...
项目中经常会用到公共的函数,由于需求不同导致某些特殊的情况会使用的不同的参数。在C++中可直接缺省最后位置的默认参数。使用宏定义的方式,可实现C语言中任意位置的参数的设置。
例:在串口发送函数中,某些字符串发送需要以固定字符结束,而其他的不需要拼接字符串,可以定义发送函数
void _USART_SendChar(USART_TypeDef* USARTx,char* Data,int len,char tail)
{
int i = 0;
USART_ClearFlag(USARTx,USART_FLAG_TC); //
for(i=0;i<len;i++)
{
USART_SendData(USARTx,Data[i]);
while(!(USART_GetFlagStatus(USARTx,USART_FLAG_TC)));
}
if(!tail) //
{
USART_SendData(USARTx,0x0d);
while(!(USART_GetFlagStatus(USARTx,USART_FLAG_TC)));
}
}
在需要使用的文件中定义宏(为方便不同的函数调用,将该部分独立为单数的文件):
#define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)
#define USART_SendChar(arg0, arg1, arg2, arg3) _USART_SendChar(arg0, arg1, arg2,DEFARG(arg3, 0))
此处为仅设置第四个参数为有默认值的参数,若需要设置多个带默认值的参数,如arg0和arg3,则:
#define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)
#define USART_SendChar(arg0, arg1, arg2, arg3) _USART_SendChar(DEFARG(arg0, 0), arg1, arg2,DEFARG(arg3, 0))
默认参数设置为0,在调用时,调用宏定义的函数USART_SendChar(arg0, arg1, arg2, arg3),注意,参数可缺省,‘,’不可省。
USART_SendChar(USART2,Cmd,strlen(Cmd),);
以上最后一个参数为默认值。
USART_SendChar(,Cmd,strlen(Cmd),);
以上第一个参数和最后一个参数为默认值。
上一篇: Linux网络 - 数据包的接收过程