1 求定义的常数M,N
#define M //?
#define N //?
int fun1(int x, int y)
{
int res = x*M + y/N;
return res;
}
//函数fun1经编译器优化乘法和除法后的汇编代码翻译为fun2
int fun2(int x, int y)
{
int t = x;
x <<= 4;
x -= t;
if ( y < 0)
y -= 3;
y >>= 2;
return x+y;
}
//求M和N?
2.A,B处assert用法有什么问题?
void fun1(const char* pfile)
{
FILE* stream;
assert( NULL != pfile ); //A
stream = fopen(pfile, "+w");
assert( NULL != stream); //B
......
}
3. 在多线程下函数有什么问题?
int g_nOut;
int fun(int nInput)
{
g_nOut = 133;
return g_nOut;
}
1.
int res = x*M + y/N;
int t = x;
x <<= 4;
x -= t;
x左移4位,即x=16x,再减去本身,再赋给x,即x=16x-x=15x =>M=15
if ( y < 0)
y -= 3;
y >>= 2;
右移2位,y=y/4=>N=4
2.A,B处assert用法有什么问题?
void fun1(const char* pfile)
{
FILE* stream;
assert( NULL != pfile ); //A
stream = fopen(pfile, "+w");
assert( NULL != stream); //B
}
用if 来判断更加灵活
3. 在多线程下函数有什么问题?
int g_nOut;
int fun(int nInput)
{
g_nOut = 133;
return g_nOut;
}
缺少对g_nOut变量的保护,若同步出问题,返回将不是g_nOut的值,而是另一线程的g_nOut