#define typecheck(type,x) \
({ type __dummy; \
typeof(x) __dummy2; \
(void)(&__dummy == &__dummy2); \
; \
})

看起来觉得没什么用的代码,其实是检查输入的参数x是不是类型type。

检测的方法很巧妙,其实就是对比的方法,如果对比呢?
分别用type的x定义了一个各自的影子变量,由于type本身表示类型,所以用type可以直接定义出一个变量: type __dumy;
而x是一个变量的名字,需要先获取这个变量多对应的类型,使用typeof获取类型,然后再定义变量。 typeof(x) __dumy2;
接下来就是对比这两个影子变量了,“&”这个符号是表示获取变量的地址,这里的对比方法是对比这两个变量的地址是否相同,从字面意义上来看对比的
是这两个变量的地址值是否相同,但是,要想完成这个对比首先需要这两个变量是同一个类型的,比如都是int型,或都是char型,否则不同类型的值是不能
对比的,这里正是用了这个特性。至于对比的结果是否相同到不重要,重要的是他们是否属于同一类型,如果是不同的类型GCC就会报错或警告,这样就知道是否
同类型了。至于如果是真的同类型,他们的大小值谁还会在乎呢?

#include <stdio.h>

int main()
{
int a=;
char b='c';
if(&a==&b)
{
printf("can compare\n");
}
else
{
printf("can not campare\n");
}
return ;
}

上面的这段代码可以做下测试,编译的时候会报错。

最新文章

  1. Android 圆形图片加白边加阴影
  2. 1036. Crypto Columns 2016 11 02
  3. ASP.NET Core -- 安装版
  4. Java-String类的常用方法总结
  5. 2014 Hangjs 见闻流水账第一天
  6. 移动开单软件 手持PDA开单扫描打印系统开发介绍
  7. 【J2EE性能分析篇】JVM参数对J2EE性能优化的影响
  8. OSI模型七层模型结构
  9. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
  10. Android(java)学习笔记134:Handler用法总结 和 秒表案例
  11. 再回首,Java温故知新——开篇说明
  12. 转:支撑Github的开源技术
  13. C++沉思录之二——虚函数使用的时机
  14. MS SQL到Oracle的数据迁移笔记
  15. 优化hexo访问速度-将hexo部署到云主机VPS
  16. Hystrix-request cache(请求缓存)
  17. matlab下K-means Cluster 算法实现
  18. jQuery 操作Cookie
  19. Autohotkey window 下宏键盘、宏命令开发入门
  20. UI自动化框架——构建思维

热门文章

  1. 最少拦截系统(杭电1257)(DP)+(贪心)
  2. [WF4.0 现实] WF4.0 Receive &amp;amp;&amp;amp; Send
  3. linux并发连接数查看
  4. Unity该插件NGUI得知(9)—— Tween并转换成世界坐标系的大小NGUI尺寸
  5. android代码集EditText只要输入号码、信
  6. NYOJ 1068 ST(段树 为段更新+间隔总和)
  7. Shell 文字 顶替tomcat星团war包裹
  8. JavaScript之二:this
  9. python 3.4.0 简单的print &amp;#39;hello world&amp;#39;,出错--SyntaxError: invalid syntax
  10. Spring先进的交易管理困难剖析