【发布时间】:2010-10-24 12:17:04
【问题描述】:
我正在学习 C。
当我尝试一些事情并从该语言的知名程序员那里收到反馈时,我发现我学习编程很好。
我决定编写自己的strcmp() 函数,只是因为我认为我可以:)
int strcompare(char *a, char *b) {
while (*a == *b && *a != '\0') {
a++;
b++;
}
return *a - *b;
}
我试图通过在while 的条件下增加指针来使其工作,但无法弄清楚如何执行return。我打算使用 C 风格 代码,尽可能多地在一行上做 :)
我能从成熟的 C 程序员那里得到一些反馈吗?这段代码可以改进吗?我有什么坏习惯吗?
谢谢。
【问题讨论】:
-
“尽可能在一条线上做”当然是一种风格,但不应该被鼓励!
-
对你的代码有一个评论,不过:你应该将函数参数设为
const char *。 -
@Oli Charlesworth 我同意,但从阅读 K&R 来看,它看起来像是一个 C 习语。也许这是我已经养成的一个坏习惯!
-
@Alex:是的,这确实是一个相当普遍的习惯用法,尤其是在遗留代码中。人们对此有不同的看法,但恕我直言,做
while(*a++ == *b++);之类的事情几乎没有任何借口! -
@Chris:请停止宣传 NULL 应该被视为函数的有效参数的荒谬想法。是的,如果将 NULL 传递给函数,它应该具有未定义的行为,就像传递
(char *)1或任何其他无意义的指针一样。