首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基本类型定义操作数语法

基本类型定义操作数语法
EN

Stack Overflow用户
提问于 2010-09-24 06:40:16
回答 5查看 3.7K关注 0票数 17

给定:

代码语言:javascript
复制
typedef type-declaration synonym;

我可以看到是怎么做到的:

代码语言:javascript
复制
typedef long unsigned int size_t;

size_t声明为long unsigned int的同义词,但是我(知道它是这样做的,但是)不能确切地看到它是如何做到的:

代码语言:javascript
复制
typedef int (*F)(size_t, size_t);

F声明为pointer to function (size_t, size_t) returning int的同义词

在第一个示例中,类型定义函数的两个操作数(type-declaration, synonym)long unsigned intsize_t

F的声明中,类型定义函数的两个参数是什么?或者是否存在类型定义函数的重载版本?

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-24 06:45:38

使用typedef的类型声明与相应的变量声明相同,只是前面加上了typedef。所以,

代码语言:javascript
复制
        int x; // declares a variable named 'x' of type 'int'
typedef int x; // declares a type named 'x' that is 'int'

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

代码语言:javascript
复制
        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)'

这不是一个“特例”;这只是一个函数指针类型的样子。

票数 32
EN

Stack Overflow用户

发布于 2010-09-24 06:49:15

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

typedef既不是函数,也不是运算符,所以“参数”、“操作数”或“重载”的概念不适用于它。它只是告诉编译器你在做什么类型的声明。

在C++中,typedef在语法上被定义为decl说明符,而不是存储类说明符。存储类说明符也是decl说明符,friend也是。我不认为这有什么实际的区别,这是C语言的另一种说法,但如果你想亲眼看看,它是C++标准的7.1。我承认,这让我暂时感到困惑。

票数 7
EN

Stack Overflow用户

发布于 2010-09-24 07:04:40

您最初对typedef语法的假设是

代码语言:javascript
复制
typedef type-declaration synonym;

结构绝对不正确。Typedef语法没有这种结构,也从来没有过这种结构。

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

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

代码语言:javascript
复制
typedef int TInt, *TIntPtr, (*TIntFuncPtr)(void), TIntArr10[10];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3783016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档