最近在用STC32G12K128这颗芯片,移植之前的程序发现函数指针数组中调用的函数没有被识别。多次尝试后发现在C251中函数指针数据不能在定义时初始化,需要定义后,逐个赋值。这一点和C51有点不同。
在定义时赋值无效:
- typedef int(* Fuc)(int, int);
- int add(int a, int b);
- int sub(int a, int b);
- int mul(int a, int b);
- int divi(int a, int b);
-
- void main()
- {
- Fuc arr[4] = {
- add,
- sub,
- mul,
- divi
- };
复制代码
编译报错误:
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: add/Demo
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: divi/Demo
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: sub/Demo
*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
NAME: mul/Demo
定义后逐个赋值:
- typedef int(* Fuc)(int, int);
- int add(int a, int b);
- int sub(int a, int b);
- int mul(int a, int b);
- int divi(int a, int b);
-
- void main()
- {
- Fuc arr[4];
- arr[0] = add;
- arr[1] = sub;
- arr[2] = mul;
- arr[3] = divi;
复制代码
编译可以通过。
|