这个代码曾读过,当时曾为其比较算法而惊喜。是的,作者写得真妙。就象一队男人和一队女人进去玩,要求一男一女搭配,男人和女人一样高。
先第一个男的和第一个女的比较,相等就进去,再比较下一对。
如果第一个男的和女的高度不等,就让高的不同,让矮的下一位继续比较,因为数据是排过序的。
今天接着复习,代码要经常看,才能看出味道来。我为
writeline (const struct linebuffer *line, FILE *stream, int class)
{
switch (class)
{
case 1:
if (!only_file_1)
return;
break;
case 2:
if (!only_file_2)
return;
/* Print a TAB if we are printing lines from file 1. */
if (only_file_1)
putc ('\t', stream);
break;
if (!only_file_2)
return;
/* Print a TAB if we are printing lines from file 1. */
if (only_file_1)
putc ('\t', stream);
break;
case 3:
if (!both)
return;
/* Print a TAB if we are printing lines from file 1. */
if (only_file_1)
putc ('\t', stream);
/* Print a TAB if we are printing lines from file 2. */
if (only_file_2)
putc ('\t', stream);
break;
}
if (!both)
return;
/* Print a TAB if we are printing lines from file 1. */
if (only_file_1)
putc ('\t', stream);
/* Print a TAB if we are printing lines from file 2. */
if (only_file_2)
putc ('\t', stream);
break;
}
fwrite (line->buffer, sizeof (char), line->length, stream);
}
这个函数而迷糊了,在switch中有return语句,会如何?我想不明白,于是自己写测试代码,原来,return语句就是结束程序的执行。而break呢,则跳 出switch,如果
while(1)
switch(c)
break;
那break到底是跳 出switch呢,还是跳 出while?
看来,我的C语言,学得不够精。
作者写这个writeline子程序,有些模糊,总感觉不清晰。读了后抓不住概念。《unix编程艺术》的作者说,diff是围绕序列比较算法的简单包装,lex是围绕NFA的简单包装,yacc是围绕lr(1)的包装,他说理解了算法,就一切明白了,没理解算法,就很难理解。我现在对writeline这么写,也很难理解。
}
这个函数而迷糊了,在switch中有return语句,会如何?我想不明白,于是自己写测试代码,原来,return语句就是结束程序的执行。而break呢,则跳 出switch,如果
while(1)
switch(c)
break;
那break到底是跳 出switch呢,还是跳 出while?
看来,我的C语言,学得不够精。
作者写这个writeline子程序,有些模糊,总感觉不清晰。读了后抓不住概念。《unix编程艺术》的作者说,diff是围绕序列比较算法的简单包装,lex是围绕NFA的简单包装,yacc是围绕lr(1)的包装,他说理解了算法,就一切明白了,没理解算法,就很难理解。我现在对writeline这么写,也很难理解。