【问题标题】:How to use static with typedef?如何将静态与 typedef 一起使用?
【发布时间】:2012-07-29 19:06:50
【问题描述】:

由于typedef 是C 中的存储类,它不能与static 变量一起使用。例如,typedef static int SISI a 将不起作用。那么有没有其他方法可以将静态与 typedef 一起使用?

我已经知道这可以做到#define SI static int

Storage Classes in C

【问题讨论】:

标签: c static typedef


【解决方案1】:

你不能。

typedef 不声明变量的instance,它声明了一个type(实际上是类型别名)。

static 是您应用于实例的限定符,而不是类型

【讨论】:

    【解决方案2】:

    没办法。 static 指定 C 标准所称的存储持续时间,它可以是静态的、自动的和分配的。 typedef 只给现有类型一个新名称。由于存储持续时间不是类型名称的属性,因此您不能在 typedef 中包含持续时间。

    我不确定您的宏 #define static int SI 打算做什么。看起来很腥。

    【讨论】:

    • static int 的缩写,这样我就可以直接将静态整数声明为SI a
    • 然后你有宏倒退。
    • 不,为什么会倒退
    • 你倒退了。 看它! :-) 它是#define MACRONAME REPLACEMENT,但是您将宏标识符和替换文本颠倒了,因为您显然只是从 typedef 剪切并粘贴了它。糟糕的程序员,今天没有饼干给你。 :-)
    • 没有理由不允许 struct 是静态的并绑定到当前范围。这样,如果你定义了一个只在你的范围内有意义的结构,它就不会在这个范围之外流血。宏也是如此,将宏仅绑定到当前范围会很好,而且我看不出它不能成为 C 功能的原因。它将很好地解决命名空间冲突。唯一应该绑定到全局范围的是核心语言功能和用户希望在所有代码中可见的特定领域扩展。
    【解决方案3】:

    我认为你误解了typedeftypedef 用于引入类型别名,即新的类型名称,因此仅适用于类型信息。 staticauto等都适用于具体的变量。

    【讨论】:

    • @cnicutar 我明白了。存储类中包含的typedef 对我来说是新的,而且看起来很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多