摘要: 第一,是程序参数化,以提高程序可移植性。如果typedef说明的数据类型依赖于机器,那么当程序一直到其他机器上时,只需改变typedef的类型定义。一个常见的情况是用typedef给不同的整型量说明类型,随后可谓每个宿主机器选择适当的short,int和long……第二,是源代码更容易阅读 阅读全文
posted @ 2012-03-24 00:43 Gwa 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blog.csdn.net/BeWithLei/article/details/1719242C字符串处理函数的实现(Linux)#include <stddef.h>char * ___strtok = NULL;char * strcpy(char * dest,const char *src){ char *tmp = dest; while ((*dest++ = *src++) != '/0') /* nothing */; return tmp;}char * strncpy(char * dest,const char *src,s 阅读全文
posted @ 2012-03-23 21:05 Gwa 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 原文:http://hi.baidu.com/luosiyong/blog/item/eab58efbb7223f254f4aeaef.html控制台应用程序的main函数4种写法:main()main(int argc)main(int argc,char * argv[])main(int argc,char * argv[],char * env[])即里面的参数argc,argv,env都是可选的,但是顺序必须是argc,argv,env。其中:argc:参数的个数,这个在程序运行时输入的命令行中字符串的个数决定。argv:具体的参数,每个参数是一个字符数组指针。env:环境变量参数, 阅读全文
posted @ 2012-03-23 14:08 Gwa 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blog.csdn.net/fisher_jiang/article/details/2472210第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。但是宏也有很多的不尽人意的地方。1、宏不能访问对象 阅读全文
posted @ 2012-03-22 17:08 Gwa 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 最近在论坛里总有人问关于sizeof的问题,并且本人对这个问题也一直没有得到很好的解决,索性今天对它来个较为详细的总结,同时结合strlen进行比较,如果能对大家有点点帮助,这是我最大的欣慰了。一、好首先看看sizeof和strlen在MSDN上的定义:首先看一MSDN上如何对sizeof进行定义的:sizeof Operatorsizeof expressionThe sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate.. 阅读全文
posted @ 2012-03-21 20:34 Gwa 阅读(293) 评论(0) 推荐(1) 编辑
摘要: 原文:http://bbs.ednchina.com/BLOG_ARTICLE_184859.HTM字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。题目:s的输出结果#include <stdio.h>struct 阅读全文
posted @ 2012-03-21 20:31 Gwa 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 原文:http://space.itpub.net/16856446/viewspace-612834堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻 阅读全文
posted @ 2012-03-21 20:06 Gwa 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 关于释放空间的小细节1 for(p = head; p != NULL; p = p->next) //错误的代码段2 free(p); 3 for(p = head; p != NULL; p = q) { //正确的代码段4 q = p-next;5 free(p);6 }多维数组int daytab[2][13]作为变元传递给函数f,则f的说明:f(int daytab[2][13])或f(int daytab[][13])或f(int (*daytab)[13]),见c程序设计语言P95在求数组元素a[i]的值时,c语言是先将其转换为*(a+i)的形式软后再求值,因... 阅读全文
posted @ 2012-03-21 20:05 Gwa 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 光标移动左:h下:j上:k右:l下一行行首:+上一行行首:-当前行行首:0当前行行尾:$后一个单词词首:w,W后一个单词词尾:e,E前一个单词词首:b,B下一屏:CRTL+F上一屏:CRTL+B下半屏:CRTL+D上半屏:CRTL+U文件尾:G当前屏幕首行:H当前屏幕末行:L当前屏幕中央:M指定行:行号G,:行号指定字符串前:/字符串,?字符串当前行指定字符前:f字符,F字符文字追加和插入当前光标右方追加:a当前光标行尾追加:A当前光标左方追加:i当前光标行首追加:I当前行下方追加行:o当前行上方插入行:O文字删除删除光标位置文字:x删除光标左方文字:X删除当前行:dd删除光标移动范围内的文字 阅读全文
posted @ 2012-03-21 12:50 Gwa 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 选项:gdb -q 没有GUNblabla一大堆介绍gdb -tui这样,使用了'-tui'选项,启动可以直接将屏幕分成两个部分,上面显示源代码,比用list方便多了。这时候使用上下方向键可以查看源代码,想要命令行使用上下键就用[Ctrl]n和[Ctrl]p.命令:Ctrl + L——刷新窗口display 表达式——在单步运行时非常有用,用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如 display awatch 表达式——设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch ak 阅读全文
posted @ 2012-03-21 01:25 Gwa 阅读(268) 评论(0) 推荐(0) 编辑