【问题标题】:error: section attribute not allowed when used in macro错误:在宏中使用时不允许使用节属性
【发布时间】:2019-10-23 13:45:01
【问题描述】:

我正在尝试将以下宏的每个声明移动到另一个内存段中。如果没有 section 属性,它可以正常工作。关于为什么我不能在这里使用它以及如何使它工作的任何想法?

 #define RINGBUFFER_DECLARE_MEMB(var, sz) \
                    uint8_t var ## __buf[sz] __attribute__((section(".rambss"))); \                                                             
                    struct ring_buffer var __attribute__((section(".rambss")))

device.h:91:29: 错误:section 属性不允许 '__iso_buf__buf' RINGBUFFER_DECLARE_MEMB(__iso_buf, BUF_SIZE_ISOLATED);

【问题讨论】:

  • 使用-E命令行选项查看展开的宏就知道是什么问题了
  • 请提供minimal reproducible example。但是,它对我有用(GCC 是 7.4.0)。

标签: c gcc memory linker


【解决方案1】:

愚蠢的我,问题是宏被用于结构定义:

   struct a { 
      RINGBUFFER_DECLARE_MEMB(umama, 3);     
   };

这当然是不允许的

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多