C语言编程能力如何提升?
同样实现一个功能,别人的代码让我感觉简洁精练,而我自己写的长、繁琐,请问如何提升自己的编程水平?能够写出简洁高效的代码? 菜鸟路过.我以前在 CSDN 上得到的答案是: 多看书, 多看优秀源码, 多敲代码. 一般还要加上多思考.
看了楼主的帖子: 我...........可以说你基础不扎实么? 建议先把基础知识轮一遍吧.{:sad:} 代码格式可以参照 Linux Kernel Coding Style ,逻辑结构可以先画流程图、伪代码、优化结构,然后再写代码,也可以先写代码再完善:合适的变量名,短小的子程序,简单的结构
推荐看《代码大全》 也是很纠结的事..........优秀源码不好找啊,,求资源 1148729990 发表于 2013-5-4 23:05
也是很纠结的事..........优秀源码不好找啊,,求资源
很多优秀的RTOS就是很好的源码啊! LDMega 发表于 2013-5-4 23:13 static/image/common/back.gif
很多优秀的RTOS就是很好的源码啊!
嗯...谢谢...但同时还想好好学习别人的好的编程框架...不喜欢以前那种脚踩西瓜皮滑到那就是那... 同样啊,自己写的程序真是没法和那些简洁的比啊 悟道靠自己, 要多思考,多总结。
lua nginx linux kernel代码
小点的axel 这东西,没有最好,只有更好
每次改都能发现改进的空间 代码要简洁,多参考优秀的源码。
代码要高效,只能学习算法。算法才是程序的灵魂。 写代码的目的是做产品,产品很重要一点是要快速推向市场,写代码最重要一点是达到功能,尽量少BUG。
至于自己的代码比人家的啰嗦,这个我认为不重要。如果你觉得你的代码有改进的必要,可以在后续的升级中完善。
编程是熟能生巧的,多做做产品,自己就会比较顺手。
总之,一步一步来,一口是无法吃成胖子的。 不引进先人的东西,只闭门造车,制造的东西不太可靠。尤其是一个人搞一个项目的时候。 师傅领进门,修行靠个人 都是靠第一直觉想的算法,基本上不知道怎么修改。 算法真的很重要呀!多动手多参考优秀代码! C语言编程能力如何提升?
1) write more code;
2) write smarter code;
别人的代码让我感觉简洁精练,
Don't write short code. Write code that's easy to understand, easy to maintain and easy to port.
For example, this would be a bad piece of code to set a pin to output:DDRB |= (1<<2);If you in the future need to change the port or pin assignment, you will need to manually change all the code.
Instead, use this:
#define LED_DDRDDRB //led on portb
#define LED (1<<2) //led on pin.2
#define IO_OUT(ddr, pins)ddr |= (pins) //set pins as output on ddr
...
IO_OUT(LED_DDR, LED); //set led as output
You only need to change LED_DDR or LED if you wish to change port / pin assignment; you only need to change IO_OUT() if you wish to port the code to a different mcu with a different way to set the output - on a PIC, for example, IO_OUT should be defined as such:
#define IO_OUT(ddr, pins) ddr &=~(pins) //set pins as output on ddrEssentially,you try to code to a logic machine as much as you can.
这个和思维 方式有关系练思维 可以下下棋 之类的 吃饭想,睡觉想,走路仍然想,不出一年,必成高手! millwood0 发表于 2013-5-6 18:26 static/image/common/back.gif
1) write more code;
2) write smarter code;
+++++++1
Don't write short code. Write code that's easy to understand, easy to maintain and easy to port.
还有俺的签名. {:lol:} 本帖最后由 monkerman 于 2013-5-6 20:06 编辑
推荐楼主看一篇文章, 里面有些原则不错, 我也是领悟不多, 介绍给你吧. 共勉.
作者: RobPike
Notes on Programming in C
网上也许有中译版.
看了18楼的回复,真是学习了! 基础还是最重要的 点滴的积累就会有一个质变 monkerman 发表于 2013-5-4 13:55 static/image/common/back.gif
菜鸟路过.
我以前在 CSDN 上得到的答案是: 多看书, 多看优秀源码, 多敲代码. 一般还要加上多思考.
...
赞成此君建议!不是一蹴而就的?经验加积累,前提基础一定要夯实! 18楼很惊艳 I was asked if I could provide a few examples of utilizing the approach I laid out earlier.
I typically use a set of macros to operate the ports / pins. I put those and other often-used macros (like NOP(), ei(), di(), etc.) into a file called gpio.h.
gpio.h always contains the same macros:
IO_SET(port, pins): set pins on port
IO_CLR(port, pins): clear pins on port
IO_FLP(port, pins): flip pins on port
IO_OUT(ddr, pins): pins set as otuput
IO_IN(ddr, pins): pins set as input
when I need to operate on a pin/port, I always use those macros. When I port the code from one mcu to another, all I need to do is to include the gpio.h file for that platform and I can recompile my code, with confidence that it will always work and no debugging is required.
Another example: i2c devices (or spi devices for that matter).
Typical implementation is to write i2c driver into the device driver file and compile them.
I do it over two layers: i2c layer and device layer.
In the device layer, I would call i2c_start(), i2c_stop(), i2c_write() and i2c_read() to perform i2c specific operations, without any knowledge of if the operations are done via software or hardware i2c.
So my device layer would look like this:
==========myi2c.c/.h=========
#include "i2c_hw.h"//use hardware i2c
//#include "i2c_sw.h" //use software i2c
void myi2c_write(unsigned char addr, unsigned char data) {
i2c_start(); //send the start condition
i2c_write(addr, data); //write data to addr
i2c_stop();
}
In i2c_hw or i2c_sw, I would implement the actual i2c_start(), i2c_stop(), i2c_write() .. routines - they have the same names!
So if I want to run my code using hardware i2c from a given mcu, I just need to include the i2c_hw.c/.h files for that platform; for software i2c, I just need to include i2c_sw.c/.h files.
At a higher level, I would then write myi2c.c/myi2c.h files so that the same drivers can be ported to different mcus.
If you follow this approach over a period of time, you will find that you start to accumulate a library of device drivers that are highly portable and fully debugged. I for example have a driver for a lot of different lcds, each with the same calling profile and can be used interchangeably from one lcd to another - to switch to a different lcd, I just need to include the right drivers and my code will compile right away, with me knowing that it will work.
Over time, this becomes a huge competitive advantage.
办法很简单,写个一万行代码,不行就写个十万行,自然就好了! 多写,多学好的代码,看看这些书:C和指针、C陷阱与缺陷、C专家编程。 多写,多分析好的代码。多看看这些书:C和指针、C陷阱与缺陷、C专家编程、算法与结构。 基础很重要,算法是程序的灵魂,多吸收好的代码,多写。 光看不行,还要写,多写
看优秀的代码,写优秀的程序
这个是练出来的 lans0625 发表于 2013-5-5 12:45 static/image/common/back.gif
代码要简洁,多参考优秀的源码。
代码要高效,只能学习算法。算法才是程序的灵魂。 ...
非常同意! millwood0 发表于 2013-5-6 18:26 static/image/common/back.gif
1) write more code;
2) write smarter code;
碉堡了!! 学习了 我也要多写 在此mark 加油 好好学习 天天向上 windboy 发表于 2013-5-8 16:20 static/image/common/back.gif
光看不行,还要写,多写
看优秀的代码,写优秀的程序
同意这个观点,我一开始的时候写的很差劲,后来看了高人的代码后,慢慢改正自己的不足,多写写,思路清晰多了,错误也慢慢减少了些 受教了 谢谢 十分钟写程序 三十分钟思考 多写多看,看看那些规范啊 什么的 都是有好处的。 多看成熟的代码,如操作系统。前提是基本功要扎实,语法和数据结构是基础,算法是灵魂。 Mark有空来读 其实多交流,进步很快! millwood0 发表于 2013-5-6 18:26 static/image/common/back.gif
1) write more code;
2) write smarter code;
说的很好,楼主可参照举一反三。敲代码是集思维、基础、实践、经验于一体的, 所以实践、积累以及开拓思维能力均很重要。 补充一点, 正如上面很多同学说的, 操作系统是良好的范例,多看看操作系统,既可以开拓视野,又可以感受操作系统的魅力。 学习了!! 多看看别人写的代码 ,尤其找一下游戏的源码看看 推荐两本书给你《C语言设计》《C语言深度解剖》先看完《C语言设计》并在按照上面的题目自己编一下程序,然后再去看《C语言深度解剖》看完之后你会发现收货很大的{:smile:} 一口吃不成胖子,楼主心急了 这个 以我个人观点来看,就是多看些内核的源码,不如ucos,linux,ecos等等,这些操作系统的源码都是
大师来编写的,无论是语言风格还是思维逻辑都是世界顶尖级的,值得我们借鉴,当你把一个操作系统的
内核看个差不多的时候你就会发现,能力不知不觉提高了一大截。 多看好代码 很多东西都是可以移植的 很多程序都是固定的 可以用在很多地方你发现好的就吸收了积累多了就行了 欲练神功,必先自宫{:lol:} mark 一下 mark!学习了 本人正在摸索,通过大神指点,有所领悟,我来回答望采纳(急需莫元):1,自己对编译语言要理解深刻到位2,多看别人的优秀代码,遇到好的代码一定要收藏起来 3,看一些优秀的模块与教程 4,多加练习,也就是在项目中多运用收集的代码模块与模版 很快你就可以吸收并有余力自己写出优秀的代码了 就是代码的累积,做多了就熟悉了,建议你看看ucos的代码写法,这个是很有代表意义的{:smile:} 一步一步来吧!~否则会从头再来!~~· 建议看看C的经典书籍吧,《C陷阱与缺陷》,还有陈正冲的书籍等等,看看别人代码的思路,主要自己要通过项目去写代码,这样提高比较快,多练习,反复调试,这只是我的建议吧。 给你推荐一本书,效果嘎嘎的《C语言程序设计第二版》谭浩强 自学单片机快俩月了自己总结了些经验:
1.多看其他人写好的程序取其精华;
2.自己写好的程序多修改去掉冗杂部分,做到精简程序;
3.模块化,把常用原件程序都做成子函数,直接调用 完全没有必要焦虑,都是一个过程。
刚接触编程的时候啥都不会的时候是啥样还记得吗
慢慢来,注意有个好编程习惯就是了。逻辑思维慢慢培养 自己一开始都埋着头写,写着写着发现别人写的算法更好更简洁就拿别人来看,分析,自己按照别人的方法结合自己的实际重新改进,再总结,慢慢就好了~ 书籍推荐Cprimer plus 然后找些例程编程训练自己的编程思想,遇到不懂的问题翻那本C书籍,我是这样过来的 师傅领进门休息靠个人 看看这个,希望对你有用。。。 多思考,多看优秀的源代码,多敲代码,有一定的代码量之后,就有感觉了! 學習了,多謝 大家 继续关注...... 提高编程能力,无非就是多看编程技巧与方法的书籍,多看高质量的例程代码,编程的时候多思考、有时候不妨变换下实现的思路。至于编程技巧与方法的书籍我推荐如图。
我这有几本关于C语言的书 分享了 个人觉得想要锻炼自己这方面的能力,想必肯定是有看到过别人写的代码,发现了差距,建议学习别人有的而自己没有的,为啥别人能想到,而自己却没有好的应用,多去写写,与别人做做对比,当然功夫不是一时半会就能掌握的,这也是个积累的过程,到最后你会发现,其实就是经验,还有重要的是编程习惯,非常重要!!! 看自已的每一句C代码和对应翻译成的汇编代码,以汇编代码最少为宜 哇 好多东西 留个爪 这个首先当然是要系统学习C语言基础,同时实践,没有时间积累,就没有经验。 大家说得都有道理,总是需要多看多写多实验,没有什么捷径可以走,我个人是这么认为 勤能补拙是良训啊 多学习别人的程序架构,规划。架构规划的好坏决定你的程序所能达到的高度.
然后才是优秀的编程技巧让你锦上添花而已.
我先mark一下 学习一下哈
多番书吧,再找几个开源慢慢看。
只是开源的大都不是很复杂不利于初学者,
要不就是文挡不齐全不利学习,
感觉就像从hello world一下子到OS开发...。
所以开源也是一样多看。
若说有没有由简入难的开源专案,
也是只能多找多看,
像是hello world到mp3 player之类的,
难度应该比较低,应该会比较有到位的感受...。 练习,只有练习。如果手头没有项目建议刷ACM题库。刷30题就可以明显提高语言感觉。 推荐一本书 看完再给分哈 c和指针最好买来看 电脑看不靠谱 多写写{:lol:} {:huffy:}怒赞啊 主要是思维方式没变 总是走不出菜鸟的圈子 唉 ttoto 发表于 2013-9-13 08:47 static/image/common/back.gif
练习,只有练习。如果手头没有项目建议刷ACM题库。刷30题就可以明显提高语言感觉。 ...
就这!cool !! 楼主,把莫元给这位老兄吧!
其实,写大半个编译器,就有C语感了;写大半个CPU,就有VERILOG语感了。 做个记号,回头再看 多看,多练 多谢程序,时间长了,你自然就是高手了。同时也要多看一些好的程序的! 看了16楼。震精了 参照代码规范,代码规则进行编写!具体可参照周立功网站的一些资料! millwood0 发表于 2013-5-8 04:56 static/image/common/back.gif
If you follow this approach over a period of time, you will find that you start to accumulate a libr ...
好方法,你这样的积累,最后形成了大量硬件接口库了。教会了C语言,教教怎么学英语吧。呵呵{:lol:} 要提高全靠天分 mark..... 多看视频和看C语言的书籍 持续关注 思维方式,还有就是多写,多看。 提高智商是根本啊,银杏叶提取物据说可以改善脑血液循环你可以试试,我不是做广告啊。呵呵