迈瑞笔试08.8.15
1. Assert考察
Void OpenFile(char* pName)
{
assert(*pName!= ‘\0’);//是否正确
char*pFileName = NULL;
pFileName= fopen(pName,”r”);
assert(NULL!= pFileName);//是否正确
}
断言和异常根本是不同的东西。
断言是指判断一个确定的东西,该东西应该为某项结果,如果不是这个结果,则肯定出了错。常用的一个地方是检查指针的合法性。并且断言失败了之后程序就退出了(about())
而异常是用来捕获程序中的错误,当异常发生时,catch块能够捕捉到,这样原先发生异常地方后面的程序就可能执行不到(MFC的__try/__catch能够返回继续执行),但是程序并不退出。
两者最重要的区别是,断言是程序员主动去检查错误,而异常是程序员设置了异常块,由程序将错误扔出来,程序员去捕捉它,因此是被动的。
assert不是一个仓促拼凑起来的宏,为了不在程序的Debug版本和Release版本引起差别,assert不应该产生任何副作用。所以assert不是函数,而是宏。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。
以下是使用断言的几个原则:
1)使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
2)使用断言对函数的参数进行确认。
3)在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。
4)一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。
2. 构造和析构的调用顺序;
3. 十进制转化二进制 十进制转十六进制;
4. 编写一个函数把例如”0X578A”的字符串变成整数形式;
5. 编写一个函数在一个字符串中找到和另一个字符串相同的最后的字符串段;
6. 设计模式的举例和应用;
7. 介绍自己读过的书籍
8. 函数指针的应用
9.是否合理?
void GetAddr(char* p)
{
p=molloc(10);
strcpy(p,”month”);
}
Main()
{
char*p;
GetAddr(p);
……
free(p);
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------