51的C语言中允许子函数调用其本身吗?

KEIL编译后提示为:
NUMERATOR0.C(169): 警告 C265: 'math_X': recursive call to non-reentrant function

此段子函数为:/**********查找对应的运算和D***********/
void math_X()
{
unsigned char x;
x=Xkey;
keyboardscan();
for(;;)
{
if((47<Xkey)&&(Xkey<58))
{
C=10*C+Xkey;
keyboardscan();
}
else if(Xkey!='=')
{
mathchar(x);
lcddisplay();
x=Xkey;
math_X();
} /*取B一半时按加减乘除相当余等号作用实现连算*/
else break;
}
D=C;

}

1、C语言可以嵌套调用或递归调用子函数。
在C语言中,函数嵌套允许在一个函数中调用另外一个函数。例如
funca()
{
funcb();
}
这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。

2、递归,是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个人要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……以此类推的思考,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。例如
funca()
{
if(statement1)
funca();
else
exit(0);
}递归最明显的特点就是,自己调用自己(就是函数嵌套调用)
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-01-09
void math_X() reentrant
{
.....
}

然后应该就没警告了。

这个警告是告诉你,该函数没有被设计为允许重入(递归),一般来说,没有为重入进行特别设计的函数,如果执行时被中断给断掉,那么它所使用的一些寄存器状态可能已经被中断破坏,从而程序可能会出错。

你加了reentrant之后,理论要应该确保你的函数即使被中断,等中断返回后依然能正确执行。本回答被提问者采纳
第2个回答  2020-09-11
可以的。
c语言规定,任意函数均可以嵌套调用。所以子函数可以调用其它子函数,也可以调用自身。

int func(int a)
{
if(a == 0) return 0;
return func(a-1)+a;
}这样调用自身的称为递归调用。
又如:
int fa(int a)
{
return a*a;
}
int fb(int a)
{
return fa(a)+fa(a);
}这就是不同函数调用的例子。
第3个回答  2022-07-15
据我所试是不可以,每次都会陷入死机,后来在仿真中一步步debug发现就是在递归处会陷入死机,不仅C51还有我接触到的S12系列的芯片也这样。貌似是这样的,你可以自己再写两个试试
第4个回答  2010-09-30
自己下到板 试下啊。 或仿真下。
相似回答