【2015-01-18】GCC扩展关键字typeof学习笔记 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2015-01-18 标题GCC扩展关键字typeof学习笔记分类编程 / C C 标签gcc·typeofGCC扩展关键字typeof学习笔记官方的介绍网址参考文档:官方的介绍网址【 https://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof 】参考文档:【 http://blog.csdn.net/npy_lp/article/details/6989676 】【 http://blog.chinaunix.net/uid-28458801-id-4200573.html 】以下内容来自【 http://blog.csdn.net/npy_lp/article/details/6989676 】有删改关键字typeof用于获取表达式的数据类型。简单例子如清单1char*chptr01;typeof(*chptr01)ch;//等价于char ch;typeof(ch)*chptr02;//等价于char *chptr02;typeof(chptr01)chparray[5];//等价于char *chparray[5];例子中chptr01的数据类型为char **chptr01的数据类型为char。复杂的例子如清单2:#includestdio.h#definearray(type,size)typeof(type)intfunc(intnum){returnnum5;}intmain(void){typeof(func)*pfuncfunc;//等价于int (*pfunc)(int) func;printf(pfunc(10)%d ,(*pfunc)(10));array(char,)charrayhello world!;//等价于char charray[] hello world!;typeof(char*)charptrcharray;//等价于char *charptr charray;printf(%s ,charptr);return0;}在Linux内核中的应用如清单3/* linux-2.6.38.8/include/linux/kernel.h */#definemin(x,y)({\typeof(x)_min1(x);\typeof(y)_min2(y);\(void)(_min1_min2);\_min1_min2?_min1:_min2;})#definemax(x,y)({\typeof(x)_max1(x);\typeof(y)_max2(y);\(void)(_max1_max2);\_max1_max2?_max1:_max2;})通过typeof获得x和y的数据类型然后定义两个临时变量并把x和y的值分别赋给这两个临时变量最后进行比较。另外宏定义中(void)(_min1 _min2)语句的作用是用来警告x和y不能属于不同的数据类型。以下内容来自【 http://blog.chinaunix.net/uid-28458801-id-4200573.html 】有删改一说明typeof的参数可以是两种形式表达式或类型。1表达式的的例子如果将typeof用于表达式则该表达式不会执行。只会得到该表达式的类型。以下示例声明了int类型的var变量因为表达式foo()是int类型的。由于表达式不会被执行所以不会调用foo函数。extern int foo();typeof(foo()) var;2参数的例子typeof(int *) a,b;等价于int *a,*b;二实例1把y定义成x指向的数据类型typeof(*x) y;2把y定义成x指向数据类型的数组typeof(*x) y[4];3把y定义成一个字符指针数组typeof(typeof(char *)[4] y;这与下面的定义等价char *y[4];4typeof(int \*) p1,p2; /\* Declares two int pointers p1, p2 \*/ int \*p1, \*p2; 5typeof(int) \*p3,p4;/\* Declares int pointer p3 and int p4 \*/ int \*p3, p4; 6typeof(int [10]) a1, a2;/\* Declares two arrays of integers \*/ int a1[10], a2[10];三局限typeof构造中的类型名不能包含存储类说明符如extern或static。不过允许包含类型限定符如const或volatile。例如下列代码是无效的因为它在typeof构造中声明了externtypeof(extern int) a;

相关新闻

最新新闻

小龙虾 AI OpenClaw 上手教程,不用配置环境快速搭建电脑自动化助手

小龙虾 AI OpenClaw 上手教程,不用配置环境快速搭建电脑自动化助手

Windows 部署 OpenClaw 实操|搭建本地 AI 自动化智能体,跳过繁琐环境配置 前言 OpenClaw,圈内被大家叫做小龙虾,是近期开源社区热度居高不下的 AI 数字员工项目,GitHub 星标数量达到 28 万 。和普通的对话式 AI 不一…

2026/8/27 12:23:09
Android开发想转行音视频,应该要怎么做?

Android开发想转行音视频,应该要怎么做?

在星球经常被问到的问题,Android开发想转行音视频,应该要怎么做? 很多人对此都有疑惑,不光有工作多年的职场老司机,也有求学期间的研究生同学们,摘录了其中一部分提问,可以看到大家的疑惑是有类…

2026/8/27 12:23:09
什么是 Agent?与大模型有什么本质不同?

什么是 Agent?与大模型有什么本质不同?

摘要:在人工智能与大模型浪潮中,“Agent(智能体)”已成为当前学术界与工业界最炽手可热的关键词。从 AutoGPT、BabyAGI 到 MetaGPT、SWE-agent,再到 OpenAI Operator、DeepSeek 等具备深度推理与交互能力的新一代系统&…

2026/8/27 12:23:09
智能体性能评估

智能体性能评估

摘要:随着大语言模型(LLM)从单纯的“问答与内容生成”向具备自主决策、规划、工具调用与长链路执行能力的“智能体(AI Agent)”演进,传统的单轮 NLP 评估范式(如 MMLU、GSM8K、BLEU、ROUGE&…

2026/8/27 12:23:09
8GHz带宽12-bit 10.5GSPS射频直采ADC的设计与工程实践

8GHz带宽12-bit 10.5GSPS射频直采ADC的设计与工程实践

在射频收发机和宽带雷达系统里,数据转换器常常是决定系统性能天花板的那块短板。过去几年里,但凡提到高速采样,工程师们大多会在几个方案之间纠结:用并行交替架构把多颗低速率ADC拼起来,忍受校准复杂度和SFDR劣化&…

2026/8/27 12:23:09
frostmourne 部署(二)

frostmourne 部署(二)

#解析#es#索引#frostmourne数据名在elasticsearch场景可以理解为索引模式,之所以不直接用索引,是因为项目计划不只支持elasticsearch,还会支持influxdb等其它数据源类型。索引后缀如果不是标准的时间模式或者单位小于天的时间模式&#xff0c…

2026/8/27 12:18:09