程序与程序设计程序 = 数据结构 + 算法;数据结构是基础,算法是手段。 需要时刻牢记的程序设计思想:复用。复用包括思想复用、算法复用、代码复用、 二进制复用。目的是不重复做工作,把人解放出来,做更有创新性的事。 程序员守则每天坚持写程序主要是些基础的,如字符串操作、链表操作、二分查找、位操作等; 怎样写代码理清程序逻辑,一气呵成,切忌写一句、调一句; 程序是艺术品写程序要从严要求,需要精雕细琢,决不能出一行次品; 优化注意优化程序,主要是减少时间复杂度和空间复杂度; 平时要多问问自己,程序还可以更快吗,运行更快吗? 调试写好一段程序,先不着急运行,心里先走一遍逻辑,是否有问题; debug with your brain。不要盲目使用工具跟踪,要看分析代码的逻辑。 C 程序员必备知识Memory layout and stack反汇编代码阅读
/*
* 显式初始化
* main {
* int i = 0;
* } 的汇编代码
*/
pushl %ebp /* ebp是函数的入口指针,因此要入栈保存,等待函数结束时返回
movl %esp, %ebp /* 将栈顶指针放入ebp,作为基址 */
pushl %ecx
subl $16, %esp /* 局部变量i, 在栈中给一个int空间 */
movl $0, -8(%ebp) /* i = 0; 赋初值 */
addl $16, %esp /* 函数返回前自动释放 i */
popl %ecx /* 函数返回 */
popl %ebp
/*
* 不显式初始化
* main {
* int i;
* } 的汇编代码
*/
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp /* 只在栈中给一个int 空间,不赋值 */
addl $16, %esp
popl %ecx
popl %ebp
变量是否要初始化为保险,最好是初始化 宏的使用宏的作用:增加代码可读性,减少冗长代码。 宏的使用场合
使用宏的注意事项定义宏时要注意加括号,以免宏替换后由于结合性等问题引起错误 const 的使用
防止非法修改本不能修改的数据,从而提高开发效率。若不使用 const 很可能造成一些诡异的 bug,而且调试时很难定位。
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指 向为常量; 如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。
修饰变量 修改函数参数
在函数 get_glyph_string 中,不能修改指针 str 指向的内存
int b = 500;
const int* a = &b; 1
int const *a = &b; 2
int* const a = &b; 3
const int* const a = &b; 4
int* get_glyph_string (const char* str, int len);
简单实用的哈西表魅力无穷的回调函数四字节对齐See Also
|