主观题:h0005. 应用题
一个C语言编译器编译下面的函数gcd()时,报告parse error before ‘else’。这是因为else的前面少了一个分号。但是如果第一个注释
/* then part */
误写成
/* then part
那么该编译器发现不了遗漏分号的错误。这是为什么?
long gcd(p,q)
long p,q;
{
if (p%q == 0)
/* then part * /
return q
else
/* else part */
return gcd(q, p%q);
}
答案:解答:此时编译器认为
/* then part
return q
else
/* else part */
是程序的注释,因此它不可能再发现else 前面的语法错误。
-------------4分
/* then part */
误写成
/* then part
那么该编译器发现不了遗漏分号的错误。这是为什么?
long gcd(p,q)
long p,q;
{
if (p%q == 0)
/* then part * /
return q
else
/* else part */
return gcd(q, p%q);
}
答案:解答:此时编译器认为
/* then part
return q
else
/* else part */
是程序的注释,因此它不可能再发现else 前面的语法错误。
-------------4分