我如何学习编写高效且可维护的C代码?

我目前在编程方面的经验仅限于在过去将一些shell脚本和一些程序集拼凑在一起。 但是,我在大学里学到了C代码的基本语法。

我想学习如何编写高效的C代码,我很困惑是从K&R还是C编程开始:现代方法。 我还应该学习一些算法书籍,以便我不会从一开始就编写低效的代码吗?

在这个阶段不要过分担心有效的代码。 清晰易读的代码让您更加关注。

通常,保持function较小,执行一项任务。 如果描述一个函数的作用需要太多句子,那么它可能需要分解成更小的函数。

使用描述性变量名称,而不仅仅是x和n等。

首先编写您喜欢开发的程序,而不是“书中告诉您要做的无聊练习”。 但是,请遵循本书的建议和指南。

每个人都有自己的风格,不要担心你的风格与下一个人的风格不相符。

最重要的是,享受吧! 如果你发现学习一件事有点无聊,那么继续学习其他东西,总是需要学习。

编辑:此外,不要试图在你走路之前跑 – 我特别想到a)指针和b)动态内存分配。 在你很舒服的时候,没有必要在这个早期阶段使用它们。

首先弄湿基础知识。 学习陷阱,学习好C风格。 您无法在一次运行中学习如何编写高效的C代码,因此可以在一开始就犯错误。

我发现学习如何编写高效代码的最佳方法是学习如何避免内存泄漏。 可维护的C代码需要源代码中的良好文档和注释。 此外,它需要编写抵制变化的代码。

例子:

不好的例子:

 int* ptr = malloc(5 * 4); //4 here being size of int. ... do something with ptr here... //<-- this is wrong! 

为什么不好? int可能不总是4.另外,在第二行中你正在用ptr(可能是赋值)做一些事情,而不检查它是否为NULL。

更好的例子:

 int* ptr = malloc(5*sizeof(int)); // better, always allocate with respect to int size if (ptr) ..do something.. 

为什么更好? 首先你分配了int的大小,所以即使在另一个架构int的大小不同,你也是好的。 您还可以在使用前检查ptr是否为NULL

最好的例子:

 int* ptr = malloc(5* sizeof(*ptr)); if (ptr) .. do something. free(ptr); // done with ptr 

为什么这是最好的方法? 首先,您将分配的大小与int的大小无关,而是直接与ptr的类型相关联。 现在,如果某人出于任何原因在ptr的声明中将int更改为long(特别是如果它在其他地方声明的话),而不更改为malloc的long内部参数; 你的分配仍然是正确的,因为它根据ptr的类型直接分配。

完成后我们也免费使用ptr,以防止内存泄漏。

您应该尝试阅读史蒂夫马奎尔的“编写固体代码”,这是一本旧书,但它可以教你所需要的东西。

首先,关注便携式编程。 有一个C标准(ISO 9899:1999又名C99和:2011又名C11–你需要投资~20美元)和一个名为POSIX (可自由访问)的“Unix”标准。 读他们,住他们。 远离任何和所有Windows和图形编程,直到你不再是一个蚱蜢。

正如智者所说: 新手为他的机器编程。 专家对一组机器进行编程。 没有特定机器的大师程序。

这是可移植性的本质,它将为您节省很多问题的forms它使用Frobozz魔术编译器在FOO-OS下编译/运行,但不在BAR-OS,WTF下吗?

老实说,在我看来你开始学习c ++这是一个c语言的高级版本,这里有更好更有效的代码,这个链接可以给你一个开始..链接http://internetseekho.com/learn-the-write-方式对代码在-C-部分-4-得到-数据从用户与显示-IT-屏幕/

您可以模拟面向对象的编程。

通过定义包含在这些结构上运行的结构和函数的文件来定义实体。 将不需要在外部看到的函数标记为静态。 这将使它们隐藏,因此您减少了对命名空间的污染。 使用new函数创建一个新结构,该函数返回指向新malloc()结构的指针,以及执行free()的删除。 定义对结构数据进行操作的简单成员,始终接受指向结构的指针作为第一个参数。

我建议你用python学习一些OOP,并应用相同的概念。

为了增加其他人所说的内容,我建议只编写大量代码。 通常我发现这个领域的人等待太长时间才能实际编码,并且花费太多时间阅读。