搜索
bottom↓
回复: 3

IAR在结构体数组赋值时为什么会报不是常量的错误?求指导

[复制链接]

出0入0汤圆

发表于 2013-3-16 23:12:52 | 显示全部楼层 |阅读模式
本帖最后由 hack3er 于 2013-3-16 23:15 编辑

代码如下:
  1. typedef struct
  2. {   
  3. void (*menu_action1)();
  4. void (*menu_action2)();
  5. }run_t;

  6. void run1()
  7. {    printf("run1()\n");}

  8. void run2()
  9. {    printf("run2()\n");}

  10. void run3()
  11. {    printf("run3()\n");}

  12. void run4()
  13. {    printf("run4()\n");}

  14. const run_t M1=
  15. {
  16. run1,
  17. run2,
  18. };

  19. const run_t M2=
  20. {
  21. run3,
  22. run4,
  23. };

  24. const run_t menus[] = {M1,M2};   

复制代码
当执行const run_t menus[] = {M1,M2};   
为什么IAR编译的会提示expression must have a constant value?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-3-17 09:28:58 | 显示全部楼层
const run_t menus[] =
{
  {run1,run2},
  {run3,run4},
};

出0入0汤圆

发表于 2013-3-17 09:29:55 | 显示全部楼层
另外如果想用结构体的常量做数组,可以用:
const run_t *menus[] =
{
  &M1,
  &M2,
};

出0入0汤圆

 楼主| 发表于 2013-3-17 17:49:35 | 显示全部楼层
jetlib 发表于 2013-3-17 09:29
另外如果想用结构体的常量做数组,可以用:
const run_t *menus[] =
{

就我上面的代码,在语法上有错么?

为什么在GCC上编译可以过 ?

而IAR上却过不了?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 23:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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