回复 4楼 jlu_uestc
呵呵,有这种情况,这与具体的编译器有关。有些编译器只以函数名做为函数的唯一标识,TC应该就是这样的。毕竟指针不过是一个内存地址而已。有些编译器以函数名、函数参数类型做为函数的标识,C++的编译器应该是这样的,这与它支持函数重载的性质有关。
不做函数指针的类型检查这件事情有好有坏。一方面可以提高灵活性,建立一个通用的函数指针指向不同的函数;另一方面带来了程序安全风险,错误的函数类型可能导致返回结果的错误,甚至程序的崩溃。函数的形参是通过栈来传递的,在函数体中以参数的类型和顺序计算其在栈中偏移量,由此获取参数值。而参数的压栈工作都是由函数调用者完成的。函数本身并不知道入栈的参数有多少,这种情况下有可能读取到一些不可预测的数据。当越过了栈段系统可能会报XXX地址不能为read或write这样的错误报告并终止程序。