自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 资源 (3)
  • 收藏
  • 关注

翻译 翻译《有关编程、重构及其他的终极问题?》——尾声

翻译《有关编程、重构及其他的终极问题?》——尾声标签(空格分隔): 翻译 技术 C/C++作者:Andrey Karpov翻译者:顾笑群 - Rafael Gu校验者:高国栋最后更新:2018年10月01日##尾声我希望你喜欢这些技巧。当然,不可能写出所有错误编写程序的方法,而且这样做可能没有任何意义。我的目标是警告一个程序员,并培养一种危机感。也许,下一次当程序员遇到一些奇怪的事...

2018-10-01 15:04:04 288 2

翻译 翻译《有关编程、重构及其他的终极问题?》——42.不要使用“empty”作为函数名

我特别在意函数的名字,因为合适的函数名字不光能让人一下子知道这个函数的大概目的,还能简单知道如何使用这个函数。对于强迫症程序员而言,函数的命名更是一个头疼的问题:)

2018-10-01 14:47:17 236

翻译 翻译《有关编程、重构及其他的终极问题?》——41.尽量避免在项目中增加不必要的新库

程序员最大的困境,其实不是技术如何难实现,或者产品经理如何胡说八道,而是自己力求实现的理想中的通用性、扩展性和现实的需求以及项目实际发展的南辕北辙。对于项目中使用的库,尤其如此。那些沧桑的程序员可以秒懂,新生的呢?还需要经历别人走过的路……

2018-10-01 09:32:33 341

翻译 翻译《有关编程、重构及其他的终极问题?》——40.开始使用静态代码分析

对静态代码分析的概念和使用做了一个简单介绍

2018-09-28 12:21:27 238

翻译 翻译《有关编程、重构及其他的终极问题?》——39.为何不正确的代码可以工作

有时候,明明包含有错误的代码,但程序还是照常运行,老程序员秒懂:)这篇就举了个例子。另外,不要使用太复杂的表达式,避免不必要的麻烦。

2018-09-22 10:15:02 152

翻译 翻译《有关编程、重构及其他的终极问题?》——38.从今以后使用nullptr而非NULL

使用NULL表示空指针?似乎成为C/C++的常识,但NULL常会带来一些愚蠢而且难以发现的问题,我自己这么多年编程经历中就遇到。用nullptr吧,不要再用NULL了,为什么,看文内。

2018-09-17 09:26:18 188

翻译 翻译《有关编程、重构及其他的终极问题?》——37.注意在do {...} while (...)中的continue

十分推荐看这篇,因为无论新手还是老手,可能都会忽略continue在do {...} while (...)中潜藏的风险。十分同意作者说的:好的程序员,不是那种炫耀很多不同编程语言技巧的,而是那种能写出清晰、易理解、甚至可以让一个新手都能看懂其代码的。

2018-09-06 11:53:15 316

翻译 翻译《有关编程、重构及其他的终极问题?》——36.如果你在电脑上发现一些奇怪的事情,看看内存吧

如果你的程序不能运行,99.99%的原因可能是你的代码引起的;除此之外,剩余的0.01%,还有可能是海森堡bug、编译器以及硬件内存。

2018-08-15 16:33:08 166

翻译 翻译《有关编程、重构及其他的终极问题?》——35.给enum新增常量后不要忘了修改对应的switch操作

作为翻译者,我觉得作者对于enum和对应switch处理这块写的有些勉强,有些凑文章的意思。这篇是我觉得作者写的最勉强的一篇。

2018-07-23 22:26:48 149

翻译 翻译《有关编程、重构及其他的终极问题?》——34.容易被你忽视的未定义行为

读了这篇文章,除了你可以知道为何使用size_t轮询数组更好,而不是使用其他外,还能知道你自己的汇编有多弱。另外,这篇和前面一篇的部分,作者好像是生气的写的,应该是被很多人怼了之后写的吧:)

2018-07-18 10:33:42 247

翻译 翻译《有关编程、重构及其他的终极问题?》——33.永远不要非法引用空指针

使用的空指针,如果只是赋值,后面判断后再决定是否使用,部分程序员可能会觉得应该没事,但其实还有一定几率引发不可预知的行为,包括程序崩溃,为什么呢?你想过没有,也许你的编译器会做优化,比如把判断去除了……

2018-07-15 10:55:52 203

翻译 翻译《有关编程、重构及其他的终极问题?》——32.危险的pritnf

常用的printf等函数,如果用不好,不光是程序会出问题,还会留下安全隐患,可能被某些人攻击

2018-07-14 21:26:31 169

翻译 翻译《有关编程、重构及其他的终极问题?》——31.在C-C++中数组不是值传递的

其实在C/C++中的函数里,以数组作为参数,还是有很多东西可以挖掘的。

2017-08-14 15:29:41 326

翻译 翻译《有关编程、重构及其他的终极问题?》——30.Visual C++和wprintf()函数

关于字符的各种编码方式,我始终觉得是任何程序员的一个基础知识,另外不同平台上也需要注意不同的对应处理函数。

2017-07-20 17:48:33 622

翻译 翻译《有关编程、重构及其他的终极问题?》——29.在迭代器上请使用前置自增操作符(++i),不要使用后置自增操作符(i++)

很多C/C++程序员都知道++i和i++的区别,但在迭代器上,这个区别就更大了,甚至到了影响性能的地步。

2017-07-15 10:03:49 855

翻译 翻译《有关编程、重构及其他的终极问题?》——28.如果你可以使用简单的函数就不要使用宏

在C/C++中,还是要减少对宏的依赖,虽然宏有时候也很有用。

2017-07-13 17:51:54 332

翻译 翻译《有关编程、重构及其他的终极问题?》——27.狡猾的BSTR字符串

随着10多年前COM被微软放弃,对应的BSTR其实也很少用到了,所以这篇文章本身来说对现在的意义不大了。

2017-06-20 15:15:52 440

翻译 翻译《有关编程、重构及其他的终极问题?》——26.潜伏的VARIANT_BOOL

BOOL类型中TRUE的定义是多少?在C++中,有的时1,有的是0,还有的是-1……所以在出来一个不熟悉的新类型时,最好看一下实际定义的值范围。

2017-06-01 13:48:24 403

翻译 翻译《有关编程、重构及其他的终极问题?》——25.不要再用this指针和nullptr比较了

在C++发展早期,因为一些原因,this指针有可能是0/NULL/nullptr,所以如果你对老的C++代码进行考古研究,会有if (this == NULL)这种比较的语句;新的C++规范中,this指针不可能为空,所以没有必要在进行这些比较了。

2017-05-22 16:37:03 2270

翻译 翻译《有关编程、重构及其他的终极问题?》——24.override和final关键字应该成为你的新朋友

好像是借鉴了Java和C#的有点,C++ 11中也多了override和final关键字,这样在使用重载时C++类的二意性和可重载性更可控了,我觉得不错。

2017-04-26 11:06:58 700

翻译 翻译《有关编程、重构及其他的终极问题?》——23.自动获取字符串的长度

这应该算是C/C++的福气呢?还是缺点呢?计算字符串的长度都有这么多文章。我觉得看具体情况吧。至少C/C++给了程序员最大程度的可控空间以及各种各样的手段。

2017-04-14 13:45:42 489

翻译 翻译《有关编程、重构及其他的终极问题?》——22.不要使用#pragram warning(default-X)

一般程序员估计很少使用#pragma warning(default:X)之类的指令,但其实这些指令在复杂的编译系统中很有用,但要小心哦,使用好也不容易。

2017-03-10 18:58:31 835

翻译 翻译《有关编程、重构及其他的终极问题?》——21.正确的检查文件的结尾符(EOF)

EOF,文件结束符,通常值为0xFF,转换成char型,值就是-1,所以很多程序员就会理所当然把-1当成文件结束符。这样的问题在于,某些国家的字母表,其中0xFF也给赋予了特定的字母,然后我们再理所当然的使用-1作为EOF判断是,错误就产生了。

2017-03-01 12:03:30 401

翻译 翻译《有关编程、重构及其他的终极问题?》——20.光对文件做EOF检查可能还不够

对于文件流的读,光使用eof方面的函数做检查还不够,因为流中可能会发生错误。在Java/C#等语言中可以使用try...catch机制,但对于C/C++能,除了bad()和fail()等方法外,还有bool()操作符。

2017-02-24 17:43:07 413

翻译 翻译《有关编程、重构及其他的终极问题?》——19.如何合理的从一个构造函数中调用另外一个构造函数

当在一个类实例化时,在其一构造函数中调用其另外的构造函数,好吧,一些不可控的事情就发生了——C++的构造函数还有这些奇怪的东西可以挖掘。C++11也有了新的解决方案。

2017-02-22 19:51:40 413

翻译 翻译《有关编程、重构及其他的终极问题?》——18.你在一个语言上积累的经验和知识不总是适用于另外一门语言

从一个语言抽象出来的经验不一定适用于另外一个语言,比如Pascal和C/C++

2017-02-21 15:52:38 447

翻译 翻译《有关编程、重构及其他的终极问题?》——17.使用专门的函数清除专有数据

类似memset之类的函数重要吗?从编译器来看,其实不重要,因为在执行优化选项后,很有可能编译器会把觉得没有必要的memset函数调用去除。还是使用专用的数据清理函数吧,比如memset_s等。

2017-02-15 15:12:39 669 1

翻译 翻译《有关编程、重构及其他的终极问题?》——16.在编程过程中“装逼”是不可接受的

写出很酷炫的代码的确很牛逼,但你知不知道,这样的代码容易犯错,而且不容易维护。所以写代码是,切忌装逼。

2017-02-05 19:10:14 430

翻译 翻译《有关编程、重构及其他的终极问题?》——15.在你的代码中开始使用enum class吧

C++ 11中有很多新特性,绝大多数特性带来了便利的同时,也或多或少的带来了新的问题,比如auto关键字,但enum class绝对是个好东西,使得原来编译器不做类型检查的枚举类型,有了强类型检查的属性。

2017-02-01 11:27:18 489

翻译 翻译《有关编程、重构及其他的终极问题?》——14.一个好的编译器和代码风格还不够

即使再专业的程序员,也难以避免犯一些愚蠢的输入错误,这些错误很多时候即使使用再好的编译器以及优秀的编码风格,也不能避免,这个时候,我们需要综合各种方法:代码审查;单元测试;手动测试;静态代码分析;等等……

2017-01-10 10:24:31 431

翻译 翻译《有关编程、重构及其他的终极问题?》——13.表格化的格式化

用表格化的方式格式化一些条件判断或者用数组初始化的语句块,并且把操作符或者分隔符按照左侧对齐,可以让代码更漂亮、更直观,更重要的是,可以更快的找到代码。

2017-01-03 20:42:29 467

翻译 翻译《有关编程、重构及其他的终极问题?》——12.当使用拷贝黏贴,一定要特别注意最后一行

的确,当连续的代码块大部分类似时,我们会使用复制黏贴来加快编码速度,然后再手动修改每一块不一样的地方,但是——我的经验也是——我们会在最后一行犯错误。作者还严谨的做了统计,不止你、不止我,而是大部分程序员都会容易在最后一行犯错。

2016-12-23 21:20:25 550

翻译 翻译《有关编程、重构及其他的终极问题?》——11.不要试图把尽量多的操作符放到一行代码里

在很多编程语言中,一些聪明的新手们喜欢在尽量少的代码中写出尽量复杂的语句,逼格似乎很高,但这种做法得不偿失,除了难懂,还易引起“Undefined Behaviar”的错误,这其实和“Sequence Point”有关,相信很多人不知道它,但了解它后,你会发现原来除了基本的运算符优先外,编译器还依赖“Sequence Point”,然后你就会放弃装逼,写出易理解且稳定的代码。对了,这点对大多数语言都通用。

2016-12-19 21:21:47 418

翻译 翻译《有关编程、重构及其他的终极问题?》——10.避免使用多个小的#ifdef块

在写程序时,其实留意的话你会发现有些语句写起来很舒服(一不小心就写多了),但阅读起来却很困难,而且容易产生错误,C/C++中#ifdef块就属于这种,虽然写起来很牛(一般都和预编译、平台等接近底层的控制有关),但几乎没人喜欢读一大片#ifdef的代码,结果在后续的java/C#中,就看不到类似语句了。世界上残余不多的C/C++程序员们,请不要以为#ifdef的逼格高,其实代价挺大的,能不写就不写吧。

2016-12-19 21:13:20 479

翻译 翻译《有关编程、重构及其他的终极问题?》——9.使用'-0'符号作为结尾标记

这个覆盖大部分语言,避免使用在所有情况中使用0,这样就能让代码更容易理解,并且更容易发现错误。下面是一些技巧:- 0 - 只使用在需要整型值0的情况;- nullptr - 作为C++的null指针;- NULL - 作为C的null指针;- `\0`,L`\0`,_T`\0` - 作为字符串结尾符;- 0.0,0.0f - 作为浮点值的0;- false,FALSE - 作为false;

2016-12-10 12:16:13 568

翻译 翻译《有关编程、重构及其他的终极问题?》——8.记住:析构函数中的异常是危险的

对于异常,我在C++和Java中用的都不多,现在ES6的Node.js中因为使用了generator、Promise和co的同步化异步操作,不得不使用异常,但这个异常和传统的异常不一致。传统异常,特别是Java,往往会被那些懒惰的程序员们滥用,就像滥用延迟垃圾回收(完全不管内存的事情)。今天翻译的这节文章中,就说明了异常使用的一个禁区:一般不要再析构函数中抛出异常。当然,因线程栈释放抛出异常产生的问题还不止于此。

2016-12-08 21:48:01 440

翻译 翻译《有关编程、重构及其他的终极问题?》——7.不要在循环中调用alloca()函数

alloca()函数在线程的堆栈中分配内存,所以如果在循环中调用alloca()很危险,容易导致栈内存的溢出。有很多方法可以避免,比如使用循环内的栈变量替代(进入和退出范围会自动释放),或者在堆上分配(使用malloc或者new,但需要自己释放)。

2016-12-07 21:55:08 661

翻译 翻译《有关编程、重构及其他的终极问题?》——6.当把一个指针明确的转换为整型时,请检查所有相关代码

这篇是讲指针的,特别是从32位平台移到64位平台指针容易引发的一些问题,讲的有些深,所以除了对于一些资深的原生开发者而言,现在大部分的程序员都看不懂,当然这些非原生的程序员而言,看不懂也没有关系,他们不需要懂——他们都看不到指针了。

2016-12-06 21:33:10 516

翻译 翻译《有关编程、重构及其他的终极问题?》——5.使用工具去分析你的代码

如果遇到有些编程问题需要详细的了解相关文档的每一个部分,才能避免问题怎么办?去看文档吗?sorry,你得花费很多时间去看,这样就不能保证你有足够的时间去完成编程了。只有一个建议,就是直接用工具,比如PSV-Studio的静态分析器。当着这里作者好像忘了DllMain其实可以检测到被应用程序加载的状态,可以通过不同状态,调用不同的函数。

2016-12-04 20:10:32 526

翻译 翻译《有关编程、重构及其他的终极问题?》——4.小心--操作符,请把表达式放在括号中

?:三元运算符的使用,其实因为其优先级很低,所以容易导致很多错误,所以把相关表达式用括号保护起来,可以避免很多容易发生的错误。

2016-12-04 17:41:06 348

香港中文大学和华为合作的对微信4.5和5.0的私有协议分析

本文档是香港中文大学和华为合作的对微信4.5和5.0的私有协议分析,因为微信是私有协议,所以他们建立了专有的测试环境,对微信所使用的TCP/HTTP/UDP等协议进行了详细的分析,以分析微信的大量使用对运营商网络的影响

2016-07-12

navicat101_premium

最好的MySQL客户端 NAVJ-5DOO-FCAA-PHMZ

2013-06-24

Asterisk,电话未来之路CHN2

中文的教程,教您全面的使用和开发asterisk

2009-09-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除