我可以得到一些关于我用 C 实现的 strcmp() 函数的反馈吗?

标签 c strcmp

我正在学习C。

当我尝试一些事情并收到该语言知名程序员的反馈时,我发现我学得很好。

我决定编写自己的 strcmp() 函数,只是因为我认为我可以:)

int strcompare(char *a, char *b) {
    while (*a == *b && *a != '\0') {
        a++;
        b++;
    }
    return *a - *b;
}

我试图通过在 while 的条件下增加指针来让它工作,但不知道如何返回。我想要使​​用C 风格代码,在一行上完成尽可能多的事情:)

我可以从成熟的 C 程序员那里得到一些反馈吗?这段代码可以改进吗?我有什么坏习惯吗?

谢谢。

最佳答案

如果你想在 while 语句中执行所有操作,你可以这样写

while (*a != '\0' && *a++ == *b++) {}

我个人并不是这种编程风格的 super 粉丝——读者在试图理解它时无论如何都需要在心里“解压”操作的顺序(并弄清楚代码是否有错误)。内存错误在 C 中尤其隐蔽,在超出或之前覆盖内存一个字节可能会在很久以后导致各种无法解释的崩溃或错误,远离最初的原因。

现代 C 编程风格更强调正确性、一致性和纪律性,而不是简洁性。简洁的表达式功能,例如预自增和后自增操作,最初是让编译器生成更好的机器代码的一种方法,但现在优化器可以轻松地自己做到这一点。

正如 @sbi 所写,我更喜欢使用 const char * 参数,而不是普通的 char * 参数。

关于我可以得到一些关于我用 C 实现的 strcmp() 函数的反馈吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008158/

相关文章:

c - 搜索功能打印我找到的行的下一行! c 编程

c - 如何保证 64 位写入是原子的?

c - 来自 Charles Petzold 的纯 C 中的 MsgBoxPrintf(win32 api) 提供中文输出...我做错了什么?

c - C语言如何从文本文件中读取数据

c - 如何在nodeJS中读取包含c-struct的文件?

c - 如何正确比较 C 中的字符串?

c - 如何创建具有不同定义的静态链接库的两个实例?

c - 用户名和密码验证 Turbo C

c - 在 C 中使用套接字时的字符串比较

c - 将字符串与链表数据元素进行比较时,strcmp 不会返回 0