代码之家  ›  专栏  ›  技术社区  ›  Peter McG

基本typedef操作数语法

  •  16
  • Peter McG  · 技术社区  · 14 年前

    鉴于:

    typedef type-declaration synonym;
    

    我知道如何:

    typedef long unsigned int size_t;
    

    声明 size_t 作为 long unsigned int 但是我看不见 确切地 怎样:

    typedef int (*F)(size_t, size_t);
    

    声明 F 作为 pointer to function (size_t, size_t) returning int

    typedef的两个操作数 (type-declaration, synonym) 第一个例子是 长无符号int 西泽特 .

    声明中typedef的两个参数是什么 f 或者是否存在typedef的重载版本?

    如果C和C++之间有相关的区别,请详细说明,否则我主要对C++感兴趣,如果这有帮助的话。

    5 回复  |  直到 14 年前
        1
  •  31
  •   James McNellis    14 年前

    类型声明使用 typedef 与相应的变量声明相同,只是 类型定义 准备好了。所以,

            int x; // declares a variable named 'x' of type 'int'
    typedef int x; // declares a type named 'x' that is 'int'
    

    与函数指针类型完全相同:

            int(*F)(size_t); // declares a variable named F of type 'int(*)(size_t)'
    typedef int(*F)(size_t); // declares a type named 'F' that is 'int(*)(size_t)'
    

    这不是“特殊情况”;这只是函数指针类型的外观。

        2
  •  7
  •   Steve Jessop    14 年前

    这不是typedef的形式语法,它只是typedef可以采用的模式之一。在C标准6.7.1中, typedef 在语法上定义为存储类说明符(如 extern static )它修改声明,以便声明声明声明类型别名而不是对象。

    类型定义 不是函数或运算符,因此“参数”、“操作数”或“重载”的概念不适用于它。它只是告诉编译器您正在做什么类型的声明。

    在C++中, 类型定义 在语法上定义为 decl说明符 ,它不是一个 存储类说明符 . 存储类说明符 也是 声明说明符 还有就是 friend . 我不认为这有任何实际的区别,这是C的另一种说法,但是如果你想找一个你自己的话,那就是C++标准的7.1。我承认这暂时困扰着我。

        3
  •  2
  •   AnT stands with Russia    14 年前

    关于typedef语法的初始假设

    typedef type-declaration synonym;
    

    结构绝对不正确。typedef语法没有这种结构,而且从未有过。

    typedef语法是普通声明的语法,就像C语言中的任何其他声明一样。关键字 typedef 只是一个声明说明符,指示声明的名称是typedef名称,而不是变量、函数指示符或其他名称。

    例如,可以在同一个typedef声明中使用多个声明符

    typedef int TInt, *TIntPtr, (*TIntFuncPtr)(void), TIntArr10[10];
    
        4
  •  1
  •   llasram    14 年前

    而不是思考 typedef 作为采用两个参数(类型和同义词)的操作,请将其视为类型限定符。声明名为 F 它是一个函数指针接受两个 size_t 参数和返回 int 你只需要:

    int (*F)(size_t, size_t);
    

    添加类型限定符 类型定义 而不是声明变量,而是声明了类型别名。

        5
  •  0
  •   linuxuser27    14 年前

    typedef 正在使用声明语法。

    函数指针 类型定义 与用于声明函数指针的方法相同。除非您声明的是类型,而不是变量。