c - 错误: section attribute not allowed when used in macro

标签 c gcc memory linker

我试图将以下宏的每个声明移动到另一个内存段中。没有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: error: section attribute not allowed for '__iso_buf__buf' RINGBUFFER_DECLARE_MEMB(__iso_buf, BUF_SIZE_ISOLATED);

最佳答案

愚蠢的我,问题是在结构定义中使用了宏:

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

这当然是不允许的

关于c - 错误: section attribute not allowed when used in macro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56504685/

相关文章:

c++ - 有没有办法用相同的格式标志打印 long int 和 int?

危险类型转换的 C 编译器警告

java - Android显卡堆内存消耗巨大? - LibGDX

java - 为什么 Runtime.freeMemory() 在构造对象后显示更多的内存?

c - sprintf(array, "%4d\n", int),将其转回 int

c++ - 调用 XCreateWindow() 时产生 GLX 错误的 XLib

我可以减去或比较受限制的指针吗?

c++ - 我怎样才能得到更好的分析?

C++ 将静态库链接到共享库

c++ - 为什么我们将使用 "new"关键字创建的内存称为 "dynamic memory"因为它也是固定内存