c语言表驱动参数传递[0803]

最近发现使用表驱动确实可以大大美化代码,
而且如果仅仅是常数型的,编译出来的代码执行效率更高,这点在单片机上尤为明显[实际上就是查表的效率高些]。
最近测试了下,使用表驱动方式调用函数,
但是发现参数的个数如果不定就是个麻烦了
但是gcc似乎在某些时候的检测并不那么严格,所以下面的代码还是可以无错运行的
[但是g++是会报错的,不过c++已经有很好的物件导向了,一般也不用函数指针了]

Code

程序运行结果如下
output -> a  
output -> a2  
output -> a  
output -> b(20)  
error:table:out of range
那么如果函数需要有些有返回值呢?
将上面的程序修改如下
Code

从编译的结果,可以看到gcc已经能够正确的报出警告
但程序还是能够运行的,比较有意思的是对于实际上不应返回的函数此时会使a改变
其输出结果如下
output -> a  
now a is 14
output -> a2  
now a is 15
output -> a  
now a is 14
output -> b(20)  
now a is 18
output -> b(100)  
now a is 200
error:table:out of range

posted @ 2009-08-03 16:57  平繁  阅读(1996)  评论(0编辑  收藏  举报