一道“坑爹”的编程面试题
前天在群里看到一道面试题,一下子有点蒙...
第一反应当然是选A,先不说没引用头文件和声明使用命名空间的问题,直接一个大网址摆在代码中间,这么低级的错误,不编译报错?可是可以看到答案肯定不是A,因为这个选A得哥们被判错了...画了个红叉。
好吧,再看看备选答案,分析一下,如果肯定是编译报错,那答案只有C了,但是C这个答案明显不对,因为编译都不通过,根本谈不上运行啊,这C和A基本上是一样的。那难道编译的时候没问题?
再仔细看看代码,根据答案倒推一下,既然答案肯定是编译没错,那看来题目已经隐式地说明了,没引用头文件和声明使用命名空间这个地方没问题,可以忽略,那问题的焦点就落在了那个“肆意妄为”的网址上了,看来出题人肯定是想让面试者考虑这个问题。
再仔细看看这个“低级失误”的网址,分析一下,如果不要把这个网址看成一个整体(网址),拆开来看,//和后面的内容是注释,那前面的那个“http:”是什么?啊!突然反应过来,原来是goto语句用的标号!心中顿时一个大的“我去!~”。
想想这个出题人还真是阴险,goto语句因为种种原因一直不被大家建议使用,像我平时编程甚至都完全没使用过,所以自然对goto语句这个标号的用法非常陌生了,自然看到这个题目会容易犯错。
虽然出题人考察面试者基础的扎实程度这个想法是好的,但是个人觉得这个题目并不是一个好的面试题。首先它不够严谨,这个题目出题人明显是想考察这个goto语句标号的点,但是前面说到了头文件和命名空间的地方就是很大的问题,如果在答题的过程中能够和面试官交流还好,如果不能交流,那估计即使面试者知道goto这个点,依然会选择编译阶段出错这个答案从而答错;其次,这个考点太偏,实际工作中几乎用不到goto,更别说是像这个题目里面这么用了。
好了,这个题目最终我在机器上跑了一下,在保证头文件和声明使用命名空间的前提下,的确是没有任何问题的,正常运行。以下是实际的代码和输出的结果。为了方便,我在XCode 5中编辑,Apple LLVM5.0编译。
代码:
结果: