欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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),);

以上第一个参数和最后一个参数为默认值。

相关标签: Work For C c语言