代码之家  ›  专栏  ›  技术社区  ›  Prasoon Saurav

typedef和非简单类型说明符

  •  18
  • Prasoon Saurav  · 技术社区  · 15 年前

    为什么此代码无效?

    typedef int INT;
    unsigned INT a=6;
    

    鉴于以下代码有效

    typedef int INT;
    static INT a=1; 
    

    ?

    根据我的理解 unsigned int 不是一个 "simple type specifier" 所以代码是不正确的。但我不确定。

    有人能指出 Standard 哪个使第一个代码无效(第二个代码有效)?

    编辑

    虽然 Johannes Schaub's 答案似乎是正确的,就这点而言(他删去了他的答案,顺便说一句),我接受了詹姆斯·科兰的答案,因为它的正确性和精确性。

    3 回复  |  直到 15 年前
        1
  •  29
  •   Prasoon Saurav    15 年前

    typedef s不像宏。它们不仅仅是文本替换。typedef创建新的typename。

    现在当你说 unsigned int , the unsigned 不是附加到 int . 无符号整型 是完整的类型名;正好有一个空格。

    所以,当你说 typedef int INT; 然后 INT 是完整的类型名。不能修改。

    static (像 const )是存储类说明符。它实际上不是类型名的一部分。

        2
  •  12
  •   Scharron    15 年前
    • 7.1.1:static是存储类说明符。它可以放在前面 任何类型。
    • 7.1.5:什么是类型说明符(无符号可以与char组合使用, 长、短或int)
        3
  •  2
  •   ShinTakezou    15 年前

    别忘了typedef与宏定义不同;在您的示例中,如果您认为in t应该被视为一个文本的话。 int . 从编译器的角度来看,typedef定义了类型别名,但在“语法”级别上看不到这一点(typedef类型在语法级别上类似于“本机”类型);由于在该级别上,char long short或int之前只允许有无符号,因此 unsigned INT 被视为“type”(“different”与char、long、short、int)的前导字母 unsigned .