Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24663
  • 博文数量: 4
  • 博客积分: 122
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 18:38
文章分类

全部博文(4)

文章存档

2010年(4)

分类:

2010-09-08 21:13:16

/*
* Check at compile time that something is of a particular type.
* Always evaluates to 1 so you may use it easily in comparisons.
*/
#define typecheck(type,x) \
({      type __dummy; \
        typeof(x) __dummy2; \
        (void)(&__dummy == &__dummy2); \
        1; \
})

/*
* Check at compile time that 'function' is a certain type, or is a pointer
* to that type (needs to use typedef for the function type.)
*/
#define typecheck_fn(type,function) \
({      typeof(type) __tmp = function; \
        (void)__tmp; \
})

//以上标红两句妙用,利用GCC规则在编译过程中检测到类型不匹配时告警


#include
int f(int a)
{
        return a;
}

int main()
{
        int i = typecheck(int,i);//不告警
        int j = typecheck(char,j);//编译时告警
        typecheck_fn(int (*)(int),f);//不告警
        typecheck_fn(void (*)(int),f);//编译时告警


        return 0;
}

阅读(2854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~