/* 不用关系符和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()