shaw 发表于 2024-9-27 10:41:28

软件嵌套级数




使用Keil的C251开发 STC32G12K128,软件 嵌套 级数有限制吗?调用子程序 8级以后出现一些问题

DebugLab 发表于 2024-9-27 10:46:20

1.对任何标准类型数据的访问,其间接访问级数最大为19级。这包括数组下标,间接操作符等

2.名称长度最长不超过256字符。C语言中函数及变量名称区分大小写。但是出于兼容的原因,所有在目标文件(object file)中的名字都以大写字母出现,因此在程序中引用一个外部符号名称时大小写无关。

3.swtich语句的case的数量并没有限定,但是受有效的内存空间及单个函数所允许最大的长度限定。

4.函数参数列表中的函数的嵌套调用层数最多为10层。

5.包含文件最多可嵌套9层。

6.条件预处理最多20层,这是预处理器的限制。

7.instruction block(即{})最多可嵌套15层。

8.宏可嵌套8层。

9.最多可向宏或函数传递32个参数。

10.一行或一个宏最多只能有2000个字符,即使在宏扩展后也不能超过2000字符。

杨为民 发表于 2024-9-27 13:08:26

DebugLab 发表于 2024-9-27 10:46
1.对任何标准类型数据的访问,其间接访问级数最大为19级。这包括数组下标,间接操作符等

2.名称长度最长不 ...

请问上面1、4、9这三条这是什么C语言编译器的限制?
我写的金水151编译器除了XDATA变量空间不足,就没有这样的限制。

DebugLab 发表于 2024-9-27 14:11:40

杨为民 发表于 2024-9-27 13:08
请问上面1、4、9这三条这是什么C语言编译器的限制?
我写的金水151编译器除了XDATA变量空间不足,就没有 ...

keil,网上查的

shaw 发表于 2024-9-27 20:28:37

包含文件最多可嵌套9层。
中招了,就这个问题!

shaw 发表于 2024-9-27 20:30:13

4.函数参数列表中的函数的嵌套调用层数最多为10层。

5.包含文件最多可嵌套9层。

有没有一个推荐的好的解决方案?

杨为民 发表于 2024-9-27 20:43:59

DebugLab 发表于 2024-9-27 14:11
keil,网上查的

(1)好的,有空我落实一下。
(2)1、4限制本质上是限制了递归调用的层数。这是不应该的。
(3)数学的很多问题都需要递归方法解决。因此C语言教科书上从未提及要限制递归层数,通常的编译器提到递归限制只是指出递归层数太多会耗尽RAM空间,造成系统崩溃。
(4)C51/C251编译器采用了函数树来跟踪函数调用情况,也许是这个功能产生的限制,所以要落实。金水151编译器没有这个功能,所以也就没有这种限制
页: [1]
查看完整版本: 软件嵌套级数