我目前在编程方面的经验仅限于在过去将一些shell脚本和一些程序集拼凑在一起.但是,我在大学里学到了C代码的基本语法.
我想学习如何编写高效的C代码,我很困惑是从K&R还是C编程开始:现代方法.我还应该学习一些算法书籍,以便我不会从一开始就编写低效的代码吗?
Dav*_*ave 12
在这个阶段不要过分担心有效的代码.清晰易读的代码让您更加关注自己.
通常,保持功能较小,执行一项任务.如果描述一个函数的作用需要太多句子,那么它可能需要分解成更小的函数.
使用描述性变量名称,而不仅仅是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!
Run Code Online (Sandbox Code Playgroud)
为什么不好?int可能并不总是4.另外,在第二行中你正在用ptr(可能是赋值)做一些事情而不检查它是否为NULL.
更好的例子:
int* ptr = malloc(5*sizeof(int)); // better, always allocate with respect to int size
if (ptr) ..do something..
Run Code Online (Sandbox Code Playgroud)
为什么更好?首先你分配了int的大小,所以即使在另一个架构int的大小不同,你也是好的.您还可以在使用前检查ptr是否为NULL
最好的例子:
int* ptr = malloc(5* sizeof(*ptr));
if (ptr) .. do something.
free(ptr); // done with ptr
Run Code Online (Sandbox Code Playgroud)
为什么这是最好的方式?首先,您将分配的大小与int的大小无关,而是直接与ptr的类型相关联.现在,如果有人出于任何原因在ptr的声明中将int更改为long(特别是如果它在其他地方被声明),而不更改为malloc的long内部参数; 你的分配仍然是正确的,因为它根据ptr的类型直接分配.
完成后我们也免费获得ptr,以防止内存泄漏.