找回密码
 立即注册
查看: 1293|回复: 4

C251中函数指针数组的用法

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-04-10 08:59:03

15

主题

30

回帖

435

积分

中级会员

积分
435
发表于 2023-3-4 22:27:04 | 显示全部楼层 |阅读模式
最近在用STC32G12K128这颗芯片,移植之前的程序发现函数指针数组中调用的函数没有被识别。多次尝试后发现在C251中函数指针数据不能在定义时初始化,需要定义后,逐个赋值。这一点和C51有点不同。

在定义时赋值无效:
  1. typedef int(* Fuc)(int, int);
  2. int add(int a, int b);
  3. int sub(int a, int b);
  4. int mul(int a, int b);
  5. int divi(int a, int b);
  6. void main()
  7. {
  8.         Fuc arr[4] = {
  9.         add,
  10.         sub,
  11.         mul,
  12.         divi
  13.         };
复制代码
编译报错误:

*** 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


定义后逐个赋值:
  1. typedef int(* Fuc)(int, int);
  2. int add(int a, int b);
  3. int sub(int a, int b);
  4. int mul(int a, int b);
  5. int divi(int a, int b);
  6. void main()
  7. {
  8.         Fuc arr[4];
  9.         arr[0] = add;
  10.         arr[1] = sub;
  11.         arr[2] = mul;
  12.         arr[3] = divi;
复制代码
编译可以通过。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:560
  • 最近打卡:2025-06-18 06:37:02

24

主题

524

回帖

1232

积分

荣誉版主

积分
1232
发表于 2023-3-5 09:05:16 | 显示全部楼层
个人感觉 用逐个赋值的写法更直观。
  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-04-10 08:59:03

15

主题

30

回帖

435

积分

中级会员

积分
435
发表于 2023-3-5 20:12:18 | 显示全部楼层
用法引人而异。之前在定义时赋值,是考虑到可以把函数指针放在flash里,节省ram空间。单片机有时太缺ram了。
  • 打卡等级:以坛为家I
  • 打卡总天数:270
  • 最近打卡:2025-06-18 18:32:40

3

主题

155

回帖

639

积分

高级会员

积分
639
发表于 2024-3-7 23:28:54 | 显示全部楼层
确实有这个问题这两天写程序也是这样的,之前C51不报错,移植到C251就出现了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:433
  • 最近打卡:2025-06-18 07:43:09

46

主题

390

回帖

1736

积分

金牌会员

静坐常思己过,闲谈莫论人非

积分
1736
发表于 2024-3-8 18:10:50 | 显示全部楼层
WARNING又不是ERROR,编译通过没啥问题吧
处事要代人所想,读书需切己用功
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-19 01:53 , Processed in 0.115754 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表