如何将static与typedef一起使用?

如何将static与typedef一起使用?,c,static,typedef,C,Static,Typedef,由于typedef是C语言中的一个存储类,因此它不能与静态变量一起使用。例如,typedef static int SI,SI a将不起作用。那么有没有其他方法可以将static与typedef一起使用呢 我已经知道这可以做到#定义SI static int 你不能 typedef不声明变量的实例,而是声明类型(实际上是类型别名) static是应用于实例的限定符,而不是类型。不能 typedef不声明变量的实例,而是声明类型(实际上是类型别名) static是应用于实例的限定符,而不是类型。我

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

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

你不能

typedef不声明变量的实例,而是声明类型(实际上是类型别名)

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

不能

typedef不声明变量的实例,而是声明类型(实际上是类型别名)


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

我认为您误解了
typedef
typedef
用于引入类型别名,即新的类型名称,因此仅适用于类型信息<代码>静态,
自动
等。所有这些都适用于特定变量。

我认为您误解了
类型定义
typedef
用于引入类型别名,即新的类型名称,因此仅适用于类型信息<代码>静态,
自动
等。所有这些都适用于特定变量。

不可能<代码>静态指定C标准调用的存储持续时间,可以是静态、自动和分配的。typedef仅为现有类型提供新名称。由于存储持续时间不是类型名称的属性,因此不能将持续时间包含在typedef中


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

不可能<代码>静态指定C标准调用的存储持续时间,可以是静态、自动和分配的。typedef仅为现有类型提供新名称。由于存储持续时间不是类型名称的属性,因此不能将持续时间包含在typedef中


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

这是重点?键入
static
真的不需要那么长时间,而且最终会让试图阅读您的代码的人感到困惑。这一点是什么?键入
static
真的不需要那么长时间,而且它会让试图阅读您的代码的人感到困惑。@cnicutar我明白了<代码>类型定义包含在存储类中对我来说是新的,而且看起来很奇怪。@cnicutar我明白了<存储类中包含的code>typedef对我来说是新的,而且看起来很奇怪。static int的缩写版本,这样我就可以直接将静态整数声明为
SI a
。然后宏就向后了。不,为什么它会向后呢。看看它!:-)它是
#define MACRONAME REPLACEMENT
,但是宏标识符和替换文本是反向的,因为您显然只是从typedef中剪切和粘贴了它。糟糕的程序员,今天没有饼干给你。:-)没有理由不允许struct是静态的并绑定到当前范围。这样,如果您定义的结构只在您的范围内有意义,那么它不会在这个范围外溢出。宏也是如此,最好只将宏绑定到当前作用域,我看不出为什么它不能成为C特性。它可以很好地解决名称空间冲突。唯一应该绑定到全局范围的是核心语言功能和用户希望在其所有代码中可见的特定于域的扩展。static int的缩写版本,这样我就可以直接将静态整数声明为
SI a
。那么宏就向后了。不,为什么要向后呢?你要向后。看看它!:-)它是
#define MACRONAME REPLACEMENT
,但是宏标识符和替换文本是反向的,因为您显然只是从typedef中剪切和粘贴了它。糟糕的程序员,今天没有饼干给你。:-)没有理由不允许struct是静态的并绑定到当前范围。这样,如果您定义的结构只在您的范围内有意义,那么它不会在这个范围外溢出。宏也是如此,最好只将宏绑定到当前作用域,我看不出为什么它不能成为C特性。它可以很好地解决名称空间冲突。唯一应该绑定到全局范围的是核心语言特性和用户希望在其所有代码中可见的特定于域的扩展。