C/C++常用功能技巧

 

/* 不用关系符和if比较大小 */
#define MAX(a, b) (a/b)?a:b
#define MIN(a, b) (a/b)?b:a
/* 上面的方法,有个缺点,b不能为0 下面的方法可以解决这个问题*/
#define MAX(a, b) (a+b+abs(a-b))/2
#define MIN(a, b) (a+b-abs(a-b))/2

/* 交换两个数的值 */
#define SWAP(a, b) (a=a^b, b=a^b, a=a^b)

 

如果需要加入一段在main退出后执行的代码,可以用atexit函数注册一个函数。函数原型为void ()(void)
 

void fun(void)
{
  printf("after main\");
}
int main()
{
  atexit(fun);
  printf("main exit\n");
  return 0;
}

 最大公约数

int gcd(int m, int n)
{
    if (n==0)
        return m;
    else
    {
        return gcd(n, m%n);    
    }
}

 最小公倍数

int lcm(int m, int n)
{
    return (m*n)/gcd(m, n);
}

 C++获取对象类名

void ClassName(void *p)
{
    type_info*** vtbl=(type_info***)(*(int*)p);
    type_info**  tp=vtbl[-1];
    type_info*   v=tp[3];
    printf("%s\n",v->name());
}

 或者

typeid(ob).name()

 

转载于:https://www.cnblogs.com/uvsjoh/archive/2012/03/27/2420184.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值