typeof在linux中妙用

简介: 今天偶然又看到了typeof这个东西,只知道它大概是返回变量的类型,后来上网查了下发现这个关键字在linux中用的非常多, 这里大概叙述了typeof是一个什么东西,怎么用,实际上可以用简单的话来重述。
今天偶然又看到了typeof这个东西,只知道它大概是返回变量的类型,后来上网查了下发现这个关键字在linux中用的非常多, 这里大概叙述了typeof是一个什么东西,怎么用,实际上可以用简单的话来重述。如果你对sizeof很熟悉的话,那么大可进行类推,sizeof(exp.)返回的是exp.的数据类型大小,那么typeof(exp.)返回的就是exp.的数据类型。值得注意的是在上面的话里我们可以看到,如果编译选项中指定了使用标准C,那么gcc的扩展使用可能会受到影响,不过在gcc编译条件下使用__typeof__依然可以正常工作,这和使用asm是一样的。当然如果是在其他的编译器条件下,这样做也不行了,只能自定义一个macro去使用,也就是说跟gcc没啥关系了,你愿意把typeof咋实现都可以。
 
下面写一个小程序示例一下:)
 
#include
 
typedef struct
{
int x;
char y;
}astruct, * pastrcut;
 
int main()
{
int sizem, sizew;
int x = 3;
typeof(&x) m;
sizem = sizeof(m);
*m = 5;
typeof(((astruct *)5)->y) w;
sizew = sizeof(w);
w = ”a”;
return 1;
}
 
首先看main函数里的m变量,这个变量的类型就是typeof(&x), 由于x是int型的(这里与x是否被赋值一点关系都没有)所以&x应该是int *类型,那么typeof(&x)返回的类型就是int*,所以m自然也就是个int*类型的。之后我们看w变量,其类型是 typeof(((astruct *)8)->y), 其中astruct是一个被定义的结构类型,其中的y元素是char*类型,那么((astruct *)8)->y是啥意思呢?在这里8并不是真正的变量,可以把它理解为一个替代使用的符号当然这个符号最好是一个数,其意思更可以理解为一个被赋值了的变量,这个数可以不是0,3也可以8也可以,随便什么都可以。那么((astruct *)0)->y仅仅就是表示了y这个变量,所以typeof的结果就是y元素的类型,也就是char。
目录
相关文章
|
Linux
LINUX进阶(其他篇)之make编译报错原因
LINUX进阶(其他篇)之make编译报错原因
335 0
|
5月前
|
Linux C语言
Linux 下pause函数是如何实现的?
Linux 下pause函数是如何实现的?
70 0
|
Linux
Linux下的find的使用方法
Linux下的find的使用方法
99 0
|
10月前
|
Linux 编译器 C语言
C++ | 探究函数重载的原理:函数名修饰【基于Windows + Linux双系统】
C++ | 探究函数重载的原理:函数名修饰【基于Windows + Linux双系统】
91 0
C++ | 探究函数重载的原理:函数名修饰【基于Windows + Linux双系统】
|
NoSQL 前端开发 编译器
细谈linux gcc的入门相关知识和用法(超详细)
第一:linux gcc包含的c/c++编译器 gcc 、cc 、c++ 、g++ 第二:gcc特点 第三:gcc的运行过程 第四:gcc选项 第五:gcc所遵循的部分约定规则
196 0
|
Linux Shell C语言
Linux下gcc编译时出现In function `_start‘:(.text+0x**) :解决方案
Linux下gcc编译时出现In function `_start‘:(.text+0x**) :解决方案
508 0
|
Linux
Linux - ${变量#*/} 语法糖
Linux - ${变量#*/} 语法糖
93 0
linux中{}的常规用法
初学linux的脚本,对于linux中的{}用法记录一下
|
Web App开发 Linux C语言
Linux Kernel代码艺术——数组初始化【转】
转自:http://www.cnblogs.com/hazir/p/array_initialization.html 前几天看内核中系统调用代码,在系统调用向量表初始化中,有下面这段代码写的让我有点摸不着头脑: const sys_call_ptr_t sys_call_table...
1171 0
|
Shell Linux 网络安全
下一篇
无影云桌面