作为我工作的一部分,我偶尔会被要求评估编程职位的候选人.我最近在我的办公桌上传递了一段代码片段,我的第一个想法是我不确定这样的代码是否会再编译.但编译它确实如此,它也可以.
谁能解释为什么以及如何运作?任务是提供一个函数来排序五个整数值.
void order5(arr) int *arr; { int i,*a,*b,*c,*d,*e; a=arr,b=arr+1,c=arr+2,d=arr+3,e=arr+4; L1: if(*a >*b){*a^=*b;*b^=*a;*a^=*b;} L2: if(*b >*c){*b^=*c;*c^=*b;*b^=*c;goto L1;} L3: if(*c >*d){*c^=*d;*d^=*c;*c^=*d;goto L2;} if(*d >*e){*d^=*e;*e^=*d;*d^=*e;goto L3;} }
现在我可以看到这种方法的缺点(1970年以后出生的人缺乏可读性和可维护性)但是有人能想到任何优势吗?我犹豫不决,但是,在我们决定是否将这个人带回第2轮之前,我想知道它是否具有除了工作保障之外的任何救赎功能.