Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在结构数组中保存函数参数_C_Arrays_Menu_Structure - Fatal编程技术网

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

我是这个论坛的新手。非常小的编程经验。英语不是我的主要语言:)

我正在为微控制器编写C代码,现在我已经创建了带有结构数组的图形菜单。在这个数组中,我定义了按下按钮时的跳转(向上、向下、回车)、菜单文本以及按下按钮时调用的函数(如果您在正确的子菜单上,则可以调用函数)

结构定义:

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也许会给新人灌输一些尊重,而不是恐惧。但这是某种东西