C++ 学习笔记(1)

摘要:本文是我个人对C++语言的认识和看法,以及以后在学习C++语言中自己要去遵守的一些规范和学习思路,提出了一个关于定义main函数及其返回值的讨论和解答。

这个学期开了C++还有单片机,想再加强一下C/C++语言,毕竟以后除了汉语和英语还得多掌握几门语言。近期的目标是复习C语言/汇编语言,学习C++语言,也许matlab语言也得学习一下。

买了一本参考书《C Primer Plus 》(中文第五版),借了两本参考书《程序设计基础》(吴文虎)和《 C++ Primer 》(第五版),现在看起来《程序设计基础》这本书是非常不错的,主要针对是的算法,穿插着C++的语法知识,看了几章感觉有点渐入佳境的感觉,还训练了一下逻辑思维,在此推荐一下。

第一篇C++学习笔记,先说一些前期的东西,主要是我的学习思路和其他的外部准备。

我是电气工程及其自动化专业的学生,以后大概不会以coding为生,但是现在在我看来,现在c/c++作为一种编程语言,能在以后的工作中提供很大的帮助,比如51需要用C51编程,ARM架构的K60也需要C语言,以后的DSP也需要(?大概是汇编),还比如最近学的《电力系统分析》中「潮流计算」计算机算法的实现,所以把C语言基本的语法、用法掌握,做到能看懂,以后会用,养成好的习惯,为以后工作打好基础。以上是基础,但通过电子设计大赛明白,对于「自动化」的核心就是控制,控制需要算法来实现,算法是框架,没有框架的话其他的都是空谈,所以更要注重算法的学习,在构建起算法的基础上,用编程实现,这才是我的最终目标,编程是为了完成任务。比如借的这本《程序设计基础》上,有很多算法,使我大大拓宽了眼界,实在是受益匪浅。

 思路(构建(数学)模型) --》 算法 --》编程构思 --》程序实现

既然开始了编程,那就很可能不是一个人的事情,所以一要遵循标准,二要有可读性。先说标准的问题:C/C++的标准,C最新的ISO标准是C99,C++最新的ISO标准是C++14,使用最新的标准不一定是最好的,但是起码不要使用20年前的C89的标准啊(比如现行很多高校的教材)。

ISO C标准
ISO C++标准

遵循标准,总是没错的。就像现在大三开的专业课,很多行业标准是需要严格遵守的(比如电气行业的DL标准),不能按照自己的想法,而是要遵循官方的、最新的行业规范来办事。

我的集成开发环境选择了VS2013community,但是据说对C99支持不好,但是对C++11支持较好,有机会的话再用更好用的开发环境吧,目前刚起步,够用就好。

2015/10/6 起使用Dev-C++ 5.11版本很好用。

谈了这么多空话,为什么要遵循标准呢?看下面这个例子:

所有的C程序都离不开主函数(main),但是现在我用过的课本都是这样写的

 void main(){ /* */}

如果写完程序,程序没有问题的话,编译运行是不会报错的(但是在Dev-C++会报错)

使用Dev-c编译运行

但是,去看最新的C99标准:

Stratup

标准要求的是:

int main() {/* */}or int main(int argc, char *argv[]){/* */}

并且在main函数的最后需要加一句 return 0;

在《C++ primer》中第一章也提到了:

main函数的返回类型必须为int,即整数类型。int类型是一种内置类型(build-intpye),即语言自身定义的类型。

为什么要用int型呢,而且返回数呢?我不知道,我去百度,

那么看一下CSDN上高手的讨论吧:

 假设用户的命令由command执行,首先command把程序加入内存,然后设置CPU的CS:IP指向程序的第一条指令(也就是程序入口,在C++中就是main()函数),从而使程序得以运行.程序结束后,返回到command中,CPU继续运行command.注意在返回的时候要有一个返回值,这样才能安全退出程序(注意我用的是退出一词),之后各寄存器会有恢复动作,如果没有返回值,虽然表面上看程序也正常结束了,但实际上它并没有退出,各寄存器并没有恢复,如CS:IP 还是指向程序尾部,如果得到CS:IP,那么可以让程序继续执行下去,但是所执行的程序已经不是你的代码所在的那段内存空间了,它在执行其它内存中的程序。

 main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。

也许一直用之前熟悉的套路,也许不问个为什么,一直会错下去,到最后debug都不知道哪里出现错误。如果一开始就使用标准的话,起码不会走弯路。

当然,阅读几百页的ISO标准是非常头疼的事,不过每次当新的标准发布时,看高手给出的update分析还是必须的(其实我就看过C89和C99的不同,还没看完……)。

PS:不过如果编译器不支持最新的标准好像也很无语,尤其是以后要面对工业环境、嵌入式的开发(比如给8051编程的Keil C51,是不支持c99标准的,但好像IAR就支持的挺好),都是古老的集成开发环境,不会追求最新的标准,这些环境的要求就是稳定,稳定压倒一切!所以是有点纠结的,新的东西肯定是为了用着更顺手,当习惯了一个方面快捷的标准,再去使用旧的不顺手的编写环境,内心一定是崩溃的,但必须适应。但目前来说抛弃VC++6.0是必须的,因为它甚至连win8.1都不支持!使用新的编译器,学习一个新的集成开发环境,也会是一个非常有趣的事!

IAR Option

可以看到在IAR for ARM里的project option里 c dialect里有对C99的支持,还有VLA(Variable Length Array可变长度数组)。

标准都可以在ISO网站上查询到!

说完标准问题,说说我对可读性的理解:

在《程序设计基础》中,吴文虎老师提到:

程序是给人编的,让人家看懂是第一位重要的事。特别是将来的你可能参加一个团队,几十人甚至几百人一起合作,相互协同,就更须将注释写的清清楚楚了。

说的特别好,尤其是对于刚刚上路的我,添加了注释也是为自己一路点灯,要不然起了一堆乱七八糟的变量,不知道有什么用,很痛苦。写了一堆代码,不知道要干什么,也很痛苦。所以走一步点一盏灯,要不对于刚起步的菜鸡,容易迷路。当然也像吴老师说的那样,对于别人来说更是一件方便的事,当有了注释,更容易明白一个人思路。看到别人的代码是整齐的,起码才有了想读下去的冲动,要是写的乱七八糟,一点想看的欲望都没有(这好像高中的语文/数学/英语/等科目的卷面分啊!)。

代码整齐在VS2013里很智能,每一行的结束打上分号就会自动对齐。但VC++6.0就没这么好了,而且coding界面也不是很友好。VS2013虽然复杂,可是会很及时的提醒你一些语法上的错误,这样对于我这样的新手,更是一个再好不过的事啦!

VS2013 Coding
反汇编

唠叨了这么多,自己也烦了。但是工欲善其事,必先利其器,当大体的思路和目标在脑袋里形成,那么只需一步一步来就好。下面,就要真正的开始了!


参考资料:

关于C99与C89的不同:http://blog.csdn.net/leixiaohua1020/article/details/12761053

main函数返回值类型的讨论:http://bbs.csdn.net/topics/200039113

ISO官网:http://www.iso.org/iso/home.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容