【问题标题】:C Macro to write a stack variable length struct?C宏写一个栈变长结构?
【发布时间】:2011-01-18 10:14:18
【问题描述】:

我不知道这是否可行,但我想编写一个宏 在堆栈上声明一个可变长度的结构。我想做这样的事情:

#define STATICLIST(max)       struct SStaticList { int iSize; id iObjects[max]; }

然后这样称呼它:

STATICLIST(32) Size32List
STATICLIST(64) Size64List

但是我收到了重新声明 struct SStaticList 类型的错误

【问题讨论】:

  • 不管怎样,C++ 模板都很好地支持这种事情。 :)
  • 我知道我知道我一直是 C++ 程序员,但我现在正在为 iPhone 开发,我不喜欢混合使用 C 和 C++。
  • 顺便说一句,我认为iSize 字段的正确类型是size_t

标签: c list variables macros declaration


【解决方案1】:

你可以做这样的事情,但你需要一些东西以避免结构具有相同的冲突名称。

#define STATICLIST(max) struct { int iSize; id iObjects[max]; }

应该这样做。

【讨论】:

    【解决方案2】:

    您可以使用标记粘贴操作## 在结构名称中包含大小:

    #define STATICLIST(max)       struct SStaticList##max { int iSize; int iObjects[max]; }
    

    【讨论】:

    • 这会导致多次使用同一参数的宏时出错
    • 这不是一个完整的解决方案,但可以创建不同大小的列表。总比没有好。
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2022-11-27
    • 2015-08-09
    • 1970-01-01
    • 2017-04-13
    • 2014-11-14
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多