C 在结构数组中保存函数参数
我是这个论坛的新手。非常小的编程经验。英语不是我的主要语言:) 我正在为微控制器编写C代码,现在我已经创建了带有结构数组的图形菜单。在这个数组中,我定义了按下按钮时的跳转(向上、向下、回车)、菜单文本以及按下按钮时调用的函数(如果您在正确的子菜单上,则可以调用函数) 结构定义:C 在结构数组中保存函数参数,c,arrays,menu,structure,C,Arrays,Menu,Structure,我是这个论坛的新手。非常小的编程经验。英语不是我的主要语言:) 我正在为微控制器编写C代码,现在我已经创建了带有结构数组的图形菜单。在这个数组中,我定义了按下按钮时的跳转(向上、向下、回车)、菜单文本以及按下按钮时调用的函数(如果您在正确的子菜单上,则可以调用函数) 结构定义: typedef const struct Menu_structure { const char *text; unsigned char Menu_points; unsigned char M
typedef const struct Menu_structure
{
const char *text;
unsigned char Menu_points;
unsigned char Menu_button_UP;
unsigned char Menu_button_DOWN;
unsigned char Menu_button_ENTER;
Menu_Waveform_parameter_t Waveform_parameter_value;
void (*Menu_function_UP) ();
void (*Menu_function_DOWN) ();
void (*Menu_function_ENTER) ();
} MenuEntry;
1:菜单tekst,2:当前子菜单的大小(用于刷新),3:向上跳转,4:向下跳转,5:输入跳转,6:参数枚举,7:按下按钮时调用的函数
阵列示例:
MenuEntry menu[] =
{
{menu_01, 5, 0, 0, 0, 0, 0, 0, 0},
{menu_02, 5, 1, 2, 1, 0, 0, 0, funtion_0},
{menu_03, 5, 1, 3, 6, 0, 0, 0, 0},
{menu_04, 5, 2, 4, 11, 0, 0, 0, 0},
{menu_05, 5, 3, 4, 1, 0, 0, 0, funtion_1},
}
调用函数的代码(按下回车按钮)
一切都很完美。问题是我的菜单很长。这意味着我需要很多不同的函数(其中一些可以与参数结合使用)
我的问题来了。如何在结构数组中保存常量参数。任何建议。谢谢。为了实现您的要求,我首先建议您从C语言转向更高级的语言,至少在用户界面方面是这样。(剩下的低级语言可以保留在C中。)如今,即使在嵌入式系统中,您也可以找到高级语言,并具有与C接口的功能 但让我猜猜,这不是你的选择 因此,为了实现您的要求,我建议您做的第二件事是使用C语言中非常糟糕的黑客程序,即预处理器宏 在C语言中,可以定义如下宏:
#定义MYMACRO(a,b,c,d,e,i){a,b,c,d,e,0,0,0,i}
因此,您的表如下所示:
{
MYMACRO( menu_01, 5, 0, 0, 0, 0},
MYMACRO( menu_02, 5, 1, 2, 1, funtion_0},
MYMACRO( menu_03, 5, 1, 3, 6, 0},
MYMACRO( menu_04, 5, 2, 4, 11, 0},
MYMACRO( menu_05, 5, 3, 4, 1, funtion_1},
}
当然,您可以使用不同的参数定义各种不同版本的
MYMACRO
,扩展以使用不同的常量,等等。请自便 为了实现您的要求,我首先建议您从C语言转向更高级的语言,至少对于您的用户界面是这样。(剩下的低级语言可以保留在C中。)如今,即使在嵌入式系统中,您也可以找到高级语言,并具有与C接口的功能
但让我猜猜,这不是你的选择
因此,为了实现您的要求,我建议您做的第二件事是使用C语言中非常糟糕的黑客程序,即预处理器宏
在C语言中,可以定义如下宏:
#定义MYMACRO(a,b,c,d,e,i){a,b,c,d,e,0,0,0,i}
因此,您的表如下所示:
{
MYMACRO( menu_01, 5, 0, 0, 0, 0},
MYMACRO( menu_02, 5, 1, 2, 1, funtion_0},
MYMACRO( menu_03, 5, 1, 3, 6, 0},
MYMACRO( menu_04, 5, 2, 4, 11, 0},
MYMACRO( menu_05, 5, 3, 4, 1, funtion_1},
}
当然,您可以使用不同的参数定义各种不同版本的
MYMACRO
,扩展以使用不同的常量,等等。请自便 这不是一个论坛。你能在你的代码中将它们保存为全局变量,让你的其他函数可以访问吗?1)没有咨询网站。2) 为您的函数使用正确的原型声明器,而不是K&R样式。3) 如果您需要许多函数,您认为如何减少函数的数量?很抱歉出现错误。我会更仔细地阅读规则。通过减少函数,我的意思是我做了一个函数来改变参数中的一个变量,我可以定义变量的方向和数量。我想避免使用很多全局变量,因为将来很难更改代码。您需要多少个参数?它们应该是什么类型的?这不是一个论坛。你能在你的代码中将它们保存为全局变量,让你的其他功能可以访问吗?1)因此没有咨询网站。2) 为您的函数使用正确的原型声明器,而不是K&R样式。3) 如果您需要许多函数,您认为如何减少函数的数量?很抱歉出现错误。我会更仔细地阅读规则。通过减少函数,我的意思是我做了一个函数来改变参数中的一个变量,我可以定义变量的方向和数量。我想避免使用很多全局变量,因为将来很难更改代码。您需要多少个参数?它们应该是什么类型的呢?C预处理器并没有被恰当地描述为一种黑客行为,不管是好是坏,它是语言的一个基本部分。没有它,C很难成为C。每个C程序员都需要接受预处理器。黑客可能会吓跑新手。:-)@斯蒂芬:我不确定是同意还是不同意。我认为向新手灌输一点对预处理器的敬畏和恐惧可能是个好主意,因为是的,你可以用它做一些很棒的事情,但也可以用它让你大吃一惊。我一直在使用一些预处理器功能,但从来没有这么大的规模。通常只定义宏编号或ifdef。我来看看还有什么可以用它来完成的。@mike nakis也许会给新人灌输一些尊重,而不是恐惧。但这是需要鼓励他们利用的东西(事实上,正如你所做的那样),因为它非常有用。见鬼,我有时甚至会在Java中使用C预处理器。TKos,我鼓励你学习C语言中的宏。它们可能很棘手,但你可以用其他任何方式做你做不到的事情。C预处理器并不是一个很好的黑客,无论是好是坏,它是语言的一个基本部分。没有它,C很难成为C。每个C程序员都需要接受预处理器。黑客可能会吓跑新手。:-)@斯蒂芬:我不确定是同意还是不同意。我认为向新手灌输一点对预处理器的敬畏和恐惧可能是个好主意,因为是的,你可以用它做一些很棒的事情,但也可以用它让你大吃一惊。我一直在使用一些预处理器功能,但从来没有这么大的规模。通常只定义宏编号或ifdef。我来看看还有什么可以用它来完成的。@mike nakis也许会给新人灌输一些尊重,而不是恐惧。但这是某种东西