1、比较a、b的大小,不要用大于、小于和IF运算符?
使用define宏加移位操作.
#include <iostream>
using namespace std;
#define MAX(A,B) (((A)-(B))>>31 ? (B) : (A))
int main()
{
int a = 10, b = 100;
cout << MAX(a, b) << endl;
}
2、程序中 const和define优劣比较?
#define//简单的变量替换,不会有类型检查如: #define ABC "abc"
const//会有类型检测,如下就会报错 const int = "abc";
//除此之外define能当函数使用,const则不能,如: #define max(a,b)(a>b?a:b)
1.差别:
const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念
,他在程序中确确实实的存在可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、
一个命令中的参数,没有实际的存在。
const常量存在于程序的数据段.
#define常量存在于程序的代码段。
2优缺点:
至于两者的优缺点,要看具体的情况了。
#define 优点
i.从run-time的角度来看,他在空间上和时间上都有很好优势。
ii.从compile-time的角度来看,类似m=t*10的代码不会被编译器优化,t*10的操作需要在run-time执行。而#define的常量会被合并。
缺点
没有类型检查
const
优点
有类型检查
3、SendMessage和PostMessage区别?
PostMessage负责消息放消息队列确定何及否处理
SendMessage要等受消息处理返码(DWord类型)才继续
PostMessage执行马返
SendMessage必须等消息处理才返