[疑难问答] typeof关键字

[复制链接]
 楼主| jackcat 发表于 2023-10-16 17:00 | 显示全部楼层 |阅读模式
typeof关键字是C语言中的一个新扩展。只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别:

声明
函数声明符中的参数类型链表和返回类型
类型定义
类型操作符s
sizeof操作符
复合文字
typeof实参
编译器接受带双下划线的关键字:__typeof和__typeof__。本文中的例子并没有遵循使用双下划线的惯例。从语句构成上看,typeof关键字后带圆括号,其中包含类型或表达式的名称。这类似于sizeof关键字接受的操作数(与sizeof不同的是,位字段允许作为typeof实参,并被解释为相应的整数类型)。从语义上看,typeof

使用typeof的声明示例
下面是两个等效声明,用于声明int类型的变量a。

typeof(int) a; /* Specifies variable a which is of the type int */
typeof('b') a; /* The same. typeof argument is an expression consisting of
                    character constant which has the type int */

以下示例用于声明指针和数组。为了进行对比,还给出了不带typeof的等效声明。

typeof(int *) p1, p2; /* Declares two int pointers p1, p2 */
int *p1, *p2;

typeof(int) * p3, p4;/* Declares int pointer p3 and int p4 */
int * p3, p4;

typeof(int [10]) a1, a2;/* Declares two arrays of integers */

int a1[10], a2[10];

如果将typeof用于表达式,则该表达式不会执行。只会得到该表达式的类型。以下示例声明了int类型的var变量,因为表达式foo()是int类型的。由于表达式不会被执行,所以不会调用foo函数。

登录后复制
extern int foo();
typeof(foo()) var;

使用typeof的声明限制请注意,typeof构造中的类型名不能包含存储类说明符,如extern或static。不过允许包含类型限定符,如const或volatile。例如,下列代码是无效的,因为它在typeof构造中声明了extern:typeof(extern int) a;下列代码使用外部链接来声明标识符b是有效的,表示一个int类型的对象。下一个声明也是有效的,它声明了一个使用const限定符的char类型指针,表示指针p不能被修改。extern typeof(int) b;
typeof(char * const) p = "a";


tpgf 发表于 2023-11-2 13:57 | 显示全部楼层
使用typeof关键字的好处是什么呢
nawu 发表于 2023-11-2 14:37 | 显示全部楼层
typeof操作符返回一个字符串,表示未经计算的操作数的类型。
zljiu 发表于 2023-11-2 15:29 | 显示全部楼层
不用知道函数返回什么类型,可以使用typeof()定义一个用于接收该函数返回值的变量
tfqi 发表于 2023-11-2 19:01 | 显示全部楼层
typeof的参数可以是两种形式:表达式或类型
gwsan 发表于 2023-11-2 19:32 | 显示全部楼层
它可以在宏定义中动态获取相关结构体成员的类型
aoyi 发表于 2023-11-2 19:58 | 显示全部楼层
typeof() 是GUN C提供的一种特性,它可以取得变量的类型,或者表达式的类型
loutin 发表于 2023-11-5 10:12 | 显示全部楼层
typeof关键字是JavaScript中的一个操作符,用于获取变量的数据类型。
biechedan 发表于 2023-11-5 10:26 | 显示全部楼层
typeof是C/C++中的一个关键字,主要用于获取变量的数据类型。
vivilyly 发表于 2023-11-5 11:06 | 显示全部楼层
它可以让你在编译时检查变量或表达式的类型,从而提高代码的可读性和可维护性。
linfelix 发表于 2023-11-5 15:09 | 显示全部楼层
typeof只能用于变量,不能用于表达式或者常量。例如,typeof(x + y)是错误的,因为x + y是一个表达式,而不是一个变量。
wengh2016 发表于 2023-11-5 17:03 | 显示全部楼层
typeof操作符也可以用于检查函数和数组等数据类型
mikewalpole 发表于 2023-11-5 17:44 | 显示全部楼层
回函数的返回类型: 如果变量是一个函数,typeof可以返回该函数的返回类型,例如"function"
earlmax 发表于 2023-11-5 20:19 | 显示全部楼层
在某些情况下,你可以使用 typeof 关键字进行类型转换,例如将指针转换为整数类型。
pixhw 发表于 2023-11-8 11:26 | 显示全部楼层
使用 typeof 关键字可以返回一个表达式或变量的类型
updownq 发表于 2023-11-8 14:32 | 显示全部楼层
typeof 关键字在 C 语言中用于获取变量或表达式的数据类型,有助于编写更健壮的代码
maqianqu 发表于 2023-11-8 15:16 | 显示全部楼层
typeof可以用来获取任何变量的数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如数组、结构体、联合体等)。这对于编写泛型代码或者在运行时动态分配内存等场景非常有用。
10299823 发表于 2023-11-8 20:19 | 显示全部楼层
对于数字类型,如果以字符串形式表示(包含小数部分),使用typeof仍然返回number。
elsaflower 发表于 2023-11-8 21:21 | 显示全部楼层
typeof 关键字在 C 语言中主要用于获取变量或表达式的数据类型
deliahouse887 发表于 2023-11-8 21:47 | 显示全部楼层
typeof 只能用于获取变量或表达式的类型,而不能用于获取函数的参数类型,因此在使用函数时可能需要额外注意
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

1809

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

27

主题

1809

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部