随笔分类 -  C/C++

摘要:C/C++编译前,首先要对源代码执行预处理。预处理器(preprocessor)是一个简单的程序,它用程序员(利用预处理器指令)定义好的模式代替源代码中的模式(删除注释、包含其他文件以及执行宏),预处理后生成中间文件.i(文本)。接下来对于.i文件进行语法分析。编译器把源代码分解成小的单元并把它们按树形结构组织起来。表达式中“A + B”中的“A”、“+”和“B”就是语法分析树的叶子节点。语法分析树建立后有时会根据用户定义,使用全局优化器(global optimizer)来生成更短、更快的代码。 全局优化器主要是进行以下优化:局部和全局公共子表达式消除在此优化中,计算一次公共子表达式的值.. 阅读全文
posted @ 2013-09-24 17:27 陳さん様 阅读(368) 评论(0) 推荐(0)
摘要:简介ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用 阅读全文
posted @ 2013-09-17 09:12 陳さん様 阅读(2954) 评论(0) 推荐(0)
摘要:C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。 rein... 阅读全文
posted @ 2013-03-12 13:58 陳さん様 阅读(141) 评论(0) 推荐(0)
摘要:最近自己整理的找出输入文件中字符个数,行数和计数程序,自我感觉比较简洁,哈哈:注:这里的字是不含空格符,跳格符(TAB)和换行符的:#include <stdio.h>#define YES 1#define NO 0int main(){ int c , nc , nl, nw,inword; inword = NO; nl = nw = nc =0; while((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c = 阅读全文
posted @ 2013-01-01 14:04 陳さん様 阅读(191) 评论(0) 推荐(0)
摘要:在一个特定的硬件平台上,多字节数据是以怎样的顺序存放的呢?譬如有一个32位的整数0x12345678(占4个字节),假设这个数存放其实地址为0x04000000的内存中,那么,从0x04000000到0x04000003这4个字节内存的情况究竟是: 内存地址 数值 0x04000003 0x12 0x04000002 0x34 0x04000001 0x56 0x04000000 0x78还是: 内存地址 数值 0x04000003 0x78 0x04000002 0x56 0x04000001 0x34 0x04000000 0x12 区别很明显:前者是数... 阅读全文
posted @ 2012-12-21 17:26 陳さん様 阅读(242) 评论(0) 推荐(0)
摘要:许多嵌入式系统程序员对Little endian和Big endian模式的概念模糊不清,其实Little endian和Big endian是多字节寻址的微处理器中,两种数据书写和存储顺序的排列方式(格式)。1、Littleendian:多字节数据中,书写时字节从右向左排列(MSB…LSB),存储时高位地址存放高位数据(MSB)。Littleendian是最常用的模式,其书写格式(例如“反汇编”出来的源代码)与传统的十进制和二进制数据的书写格式相同,现在主流微处理器,包括8051系列单片机、Intel8x86 CPU等都采用这种模式。2、Bigendian:多字节数据中,书写时字节从左向右排 阅读全文
posted @ 2012-12-21 16:42 陳さん様 阅读(342) 评论(0) 推荐(0)
摘要:用内联取代宏:1.内联可调试;2.可进行类型安全检查或自动类型转换;3.可访问成员变量。另外,定义在类声明中的成员函数自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?(a):(b))所替换。 宏定义语句的书写格式有过分的讲究, MAX与括号之间不能有空格,所有的参数都要 放在括号里。尽管如此,它还是有麻烦: int a=1,b=0; MAX(... 阅读全文
posted @ 2012-12-21 16:01 陳さん様 阅读(427) 评论(0) 推荐(0)
摘要:C++提供了一种特殊的类型void*,它可以保存任何类型对象的地址:double obj = 3.14;double *pd = &obj;//ok: void* can hold the address value of any data pointer typevoid *pv = &obj; //obj can be object of any datapv = pd;//pd can be a pointer to any typevoid* 表明该指针与地址值相关,但不清楚存储在此地址上的对象的类型。 void*指针只支持几种有限的操作:与另一个指针进行比较;向函数传 阅读全文
posted @ 2012-12-14 14:59 陳さん様 阅读(116) 评论(0) 推荐(0)