函数指针的调用代码在C环境能编译通过 换到C++就不可以

2019-12-30 19:26发布

代码如下
        void testInt(int a){
                printf("testInt a = %d " , a);
        }

        void testFloat(float a){
                printf("testFloat a = %f " , a);
        }
       
        void run(){
                void* funp;
                funp = testInt;
                (*(u32(*)())funp)(3);
        }


主要是想在DEBUG的时候通过一个函数指针调用需要调试的函数, 但是函数的数据类型不知道. 这段代码在C里面可以编译成功, 但是在C++的环境下编译不通过.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
xiaoergao
1楼-- · 2020-01-01 08:20
wye11083 发表于 2017-3-5 17:46
那你可以都转成f再计算,最后加个0.1再取整。

转成float遇到较大数的时候会损失精度
xiaoergao
2楼-- · 2020-01-01 09:07
takashiki 发表于 2017-3-5 17:45
都改用C++了,就别纠结这些有的没的了。这些是C程序需要考虑的事情。
直接函数重载,不折腾,乱七八糟的 ...

不是在编译的时候来通过重载实现的.

我希望是串口发过来一个函数名和对应的参数.
串口handler参数判断发过来的函数名来调用不同的函数.  但是不同的函数又有不同的参数类型. 就没法把对应的函数指针转换成对应类型的函数指针.
takashiki
3楼-- · 2020-01-01 11:30
 精彩回答 2  元偷偷看……
stdio
4楼-- · 2020-01-01 11:49
一入C++深似海
javenreal
5楼-- · 2020-01-01 16:47
把第二个函数改成这样:void testFloat(int a){                 printf("testFloat a = %f " , (float)a);         }         
xiaoergao
6楼-- · 2020-01-01 20:01
takashiki 发表于 2017-3-5 18:32
表示无法理解你的意图,无法猜测。
如果你的串口发送一个“testFloat(5)",因为没有小数点,您的意思就是 ...

首先感谢您的回复

你提到的应用场景是在源程序里面这样使用是可以的。

可是我想要实现的是这样:
我有N个函数,这些函数都有8个参数。
每个参数都可能是 int 或者float 。理论上一共有2^8 =256个类型的函数(因为参数类型不同)
我通过串口发送8个数据,用逗号隔开。每个数据可能是int或者float。按照常规的做法我需要判断每个数据是哪一种然后决定调用哪个函数,这样的话就要用N多的if  或者用256个 switch case。

一周热门 更多>