上海交通大学 ACM班 原作者 2015级 卢思迪 部分调整 2016级 刘啸远 加了一点点 2017级 侯博涵 代码风格与调试 上海交通大学 ACM班 原作者 2015级 卢思迪 部分调整 2016级 刘啸远 加了一点点 2017级 侯博涵
概要 代码风格与编程环境配置 调试 黑科技(一部分机考可用)
环境? 编程语言根本不重要,重要的是思想? 用什么工具根本不重要,重要的是人?
编程环境配置 选择编辑器+命令行还是IDE? 如何在Windows上搭建起舒适的命令行环境? 好的字体? Consolas, Courier 之类等宽字体 好的编辑器? Emacs,Vim,Notepad++,Atom Sublime text, VS Code 好的C++IDE? VS JetBrains出品的系列IDE(Clion for c++, IntelliJ IDEA forJAVA) Qt Creator etc.
与世界分享你的idea——代码风格 为什么要注意代码风格? 下面是一个不好的例子:
好的代码风格 Allman K & R Google Style 更详细来说: 空格 空行 花括号 命名 好的宏与模板元编程
https://en.wikipedia.org /wiki/Indent_style
http://blog.csdn.net/voidccc/article/details/37599203
空格 运算符间,逗号之后 例子: a = (a + 2) * 2 * __gcd(221, 1896); ++a; 突出关键字 for (int i = 1; i < n; ++i) while (vInt.empty()) if (get_handle(virtual_pid, this -> allocator) -> status == Process.blocked) switch (token.type_value) etc
空行与注释 用途: 明确代码段之间在逻辑上的相对独立。 常见情景 类定义结束 函数定义结束 长的连续逻辑内部不同阶段间
花括号 Allman风格 K & R风格 跟PASCAL类似,相匹配的花括号间严格对齐,不同的层次间相差一个缩进单位(一般是一个Tab) for (auto i = v.begin(); i != v.end(); ++i) { if (i -> graphics -> filter -> ready()) { i -> execute(); }
命名 Delphi/Borland Style (大小驼峰法) C / Unix Style (下划线间隔法) 类,结构体和函数名以一个短语命名,短语中每个单词首字母大写 GetThingsDone() 变量名以一个短语命名,第一个单词全部小写,其后每个单词首字母大写 bigBadWolf C / Unix Style (下划线间隔法) 短语中单词全部小写,以下划线间隔之 long_long_name_to_type 匈(fan)牙(ren)利(lei)命名法 int int_something
调试 使用GDB等命令行工具 使用IDE 输出日志 几种特殊方法 n r b p c help GUI程序:弹框中断(alert) assert 折半法 多组数据:特殊数据中断法
内存泄漏的处理 使用智能指针等结构 使用valgrind或者VS等内存检查工具
一些奇奇怪怪的东西 #define CHAR_P char* typedef char* Char_p CHAR_P a,b; Char_p c,d; what’s the type of … cout<<a++<<++a<<++a++<<++++a … OOP… Try to avoid…(If you don’t understand)
黑科技集锦 内联汇编(没见人用过,你们加油) new placement operator和简易的内存池构建 ios :: sync_with_stdio(false); //不要使用endl cin.tie(0); cout.tie(0); scanf >= 快速读入 > cin(关闭同步) >> cin(开启同步) __gcd(x, y)
最好的调试器 你优秀的同学,与你相伴四年的兄弟姐妹们 最优秀的你自己
一点大实话(from LSD) 大家可能会辛苦一点,选择交大就是选择了责任,选择了ACM班就是选择了成吨的责任=。= 珍惜每一个人的思想,不管你是不是觉得你们面临的问题其实很trivial =。= 善用搜索引擎可以帮助你看到更大的世界=。= 不仅仅要掌握专业知识,也要掌握照顾电脑的一点点技术,计算机算是你一个重要的伙伴,善待它=。= 好的饮食和锻炼助你健康成长=。= 尽早找到自己感兴趣的领域,但是不要在学习的时候限制自己,觉得什么什么没有用就懈怠,这样是不 行的,怎么apply for professor? 曰..曰
二点大实话 事情并不像你想象的那么困难,当然也不会像你想象想那么简单。 基本上你今天的爆肝都来自于你昨天的拖延。 当你发现你无所事事的时候,事情就不对了。