如何才能正确有效学习c语言
如何才能正确有效学习c语言
C语言是一门“古老”也是一门很有前途的计算机编程语言。想要学好c语言,需要找到正确的学习方法。以下是学习啦小编分享给大家的有效学习c语言的建议,希望可以帮到你!
有效学习c语言的建议
(一)编。
学习C语言,乃至学习所有的语言,都讲究一个动手——不是动手打人,而是动手编程序。你必须通过编写程序来熟悉知识、理解知识。倘若只学不编,只看别人的程序,自己不动手写,是不能从入门到精通的。要知道,在计算机界,只说不练的人很欠揍。试想一下,你在哪里辛辛苦苦的编程序,他却站在一边,如老板一样喋喋不休,对你提出这项意见,那项思路,甚至畅谈自己编程将会如何如何,好像很牛皮的样子,但就是不编一行代码。估计大家碰上如此之人,只会一个动作,那就是点击“踩”。
一个“编”字就可以学好C语言吗?真的如此简单吗?不是的,仅仅“编”是不够的,你还需要“我编”。
(二)我编。
请注意修辞,“我”编!这个“我”其实就是只“你”,也就是学习C语言的人。
大家在学习C语言时,要多编写程序,比如学习链表时,要自己编写链表程序,甚至自己编写俄罗斯方块等游戏程序来练习。不过有个前提条件,你必须自己编写这些所有的程序才有效果,如果你从网络上下载了某某源代码,或者拷贝了同学的程序,任何大言不惭的说是自己编写的,那么我也只能大言不惭的告诉你,这样做出了养成偷窃的习惯外,没有任何效果!
有同学会问,那么“亲自”编程序总可以精通C语言了吧,其实还差一点点,仅仅“编”是不够的,只是“我编”还不足以精通,为了达到C语言的最高峰,你还需要“我编编编”。
(三)我编编编。
“编”字重复三次,这里的“三”,代表多,意思是你必须多多的编写程序。亲自编写10行代码等于没有编,亲自编写1000行代码是远远不够的,亲自编写1万行代码还马马虎虎,亲自编写10万行代码,你绝对成为程序员中的战斗员。
乍一看10万行代码,估计有同学会先直挺挺的躺下去,然后又眼珠一转站了起来——他们想起了坏主意。“不就是10万行吗,容易!现在的编程工具都有代码生成功能,随便在VC中用鼠标拖曳几下,搞一个MFC窗口程序,系统就自动生成了几百行的代码。在搞几个三方控件,几千行代码就生成了!”
再次声明,“编编编”是有前缀的,那就是“我”,也就是学习者自己,使用代码自动生成工具产生的代码难道是“学习者”编写的?
要不上有政策,下有对策,“不用代码生成器,那么就抄,照着输入代码就行!”哎,人不能无耻到那种地步!这十万行代码要“你”亲自完成,亲自在脑海中发芽、生根,再亲自逐行输入。这又不是什么政绩任务,也不是什么形象工程,欺骗别人最终只能是自欺欺人。
有效学习c语言的建议
(1)保持好奇心
这是一个现实的问题,如果你是非计算机专业的大学生,大部分人对C语言是恐惧的,因为(挂科率高)你懂得……。而如果你是小学生或初中生,倒也不用担心,因为你们的勇气和好奇心都比大学生强大很多。当然,无论是谁,保持好奇心是你学习不断前进的永恒动力。
(2)掌握有效的学习方法
C语言是一门公认的不易入门的语言(否则也不会那么多大学生“惨叫”了^_^),因为涉及的内容比较多( 特别是语法繁多 )。从这么多年的教学实践来看,传统教学和学习存在一些问题。
目前,我们高校也在进行C语言教学方式的改革,概括起来几个阶段:
(a) 理解和体验阶段
阅读和理解现有的程序,一般是教材资料的程序,每个程序都必须亲手打一遍。在输入代码的同时,一定要了解每一个语句的意义和运算符号的意义。
(b) 修改阶段:
完成了第一阶段的学习后(一般2-4节课),开始根据给定的源代码进行简单的修改,这个阶段可以实现一点点自己的想法,同时也能将相关的语法掌握的更加熟练。
(c) 模仿阶段:
当我们可以进行简单修改代码后,可以尝试模仿现有程序的代码,编写自己的代码,比如,我们学会了求解梯形面积的程序后,我们可以编写求解三角形的面积。
此时的模仿,不仅仅是模仿代码结构,还需要模仿问题的分析方法,有数学问题,也有实际生活问题,这也是初步培养逻辑思维和计算思维的过程。
(d) 独立阅读代码阶段
在编写程序之前,阅读现有的程序,可以提高程序的理解能力,学会其他人编写程序的思想,也可以是同学的程序,找出同学程序的错误或不同写法,都是很好的学习编程的方式。
(e) 独立分析问题阶段
这个阶段和第4阶段同时进行,独立分析问题就是将现实的问题运用计算思维去解决,即通过问题分解、模块划分、算法设计和代码编写,最后调试程序。
C语言该怎样写
优化
-O2,-O3
通常想使用-O2,但有时也使用-O3。在两个级别下(通过编译器)分别进行测试并且保持最佳性能。
-Os
-Os如果你关注缓存效率(本该如此),这个选项能帮上你。
警告
-wall -Wextra -pedantic
最新版本的编译器支持-Wpedantic,但为了向后兼容其也接受古老的-pedantic。
在测试过程中,应该在所有的平台上都添加-Werror和-Wshadow。
因为不同的平台、编译器和库会发出不同警告,通过使用-Werror可更有针对性地部署生产资源。你或许并不想仅因为某个平台上从未见过的GCC版本在新的运行方式下时报错就毁掉用户的全部构建。
额外选择包括-Wstrict-overflow -fno-strict-aliasing。
要么指定-fno-strict-aliasing,要么就确保只以对象创建时的类型对其进行访问。因为许多C语言代码拥有跨类型的别名,当不能控制整个底层源代码树时,使用-fno-strict-aliasing是个不错的选择。
到目前为止,clang有时会对一些有效语法发出警告,所以需要添加-Wno-
missing-field-initializers。GCC在4.7.0版本后修正了这些不必要的警告。
构建
编译单元
构建C程序项目的最常见方式是将每个C源文件分解成目标文件,最后将所有目标文件链接到一起。这个过程在增量开发中表现很好,但从性能和优化角度看,并非最优。因为在这种方式下编译器不能检测出跨文件的潜在优化之处。
LTO——链接时优化
LTO通过使用中间表示方式对目标文件进行处理,因此解决了“跨编译单元源文件分析和优化问题”,所以source-aware优化可在链接时跨编译单元实现。
LTO明显减缓了链接过程,但make-j会有所帮助。
clang LTO
gcc LTO
到2016年为止,clang和gcc都可通过在目标文件编译和最后库/程序链接时,向命令行选项中添加-flto来支持LTO。
不过LTO仍需监管。有时,程序中一些代码没有被直接使用,而是被附加的库使用了。因为LTO会在全局性链接时检测出没有使用或者不可访问的代码,也可能将其删除,所以这些代码将不会包含到最后的链接结果中。
架构
-march = native
允许编译器使用CPU完整的特性集。
再一次,性能测试和回归测试都非常重要(之后在多个编译器以及多个版本中对结果进行比较)以确保任何启用的优化都不会产生副作用。
如果你使用not-your-build-machine特性,-msse2和-msse4.2可能起到作用。
猜你喜欢:
1.程序开发
3.学习英语
4.前端开发实习总结
5.c语言逻辑思维