题目

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
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值