摘要: 1.#error#error命令的作用是编译时输出错误信息,命令形式为:#error 错误信息如果预处理器遇到一个#error命令,他将显示错误信息并停止编译过程实际编程中,#error命令一般与条件编译一起使用,用于测试正常编译中出现的异常现象.例如:如果不是32位Windows操作系统时,给出的变异错误的预处理指令是:#ifndef _WIN32#error _WIN32 must be defined#ebdif2.#pragma#pragma命令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作,命令形式:#pragma token-string其中 token-string 阅读全文
posted @ 2013-01-15 09:24 aswater 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1.首先文件包含的两种查找路径:1.在编译器INCLUDE系统路径中查找文件2.在源文件所处的文件中查找,如果找不到再在系统路径中查找2.文件重复包含问题:1.使用条件编译:#if !define(__HELLO__)#define __HELLO__..... //头文件内容#endif2.使用特殊预处理命令#pragma once#pragma once.... //头文件内容即在头文件第一行增加这个预处理命令,它的意思是:在编译一个源文件时,只对该文件包含一次二.条件编译目的:根据需要将源程序的不同部分编译进程序典型的条件编译是将程序编译分成调试版本(Debug)和发行版(Release 阅读全文
posted @ 2013-01-15 09:23 aswater 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 首先要说明的是C语言的预处理命令是在去掉注释之后才进行的。有时因为注释的存在会对预处理有影响,去注释就是将注释换成空格。1.预处理指令不是C语言本身的组成部分,更不是C语言语句:他是C语言标准规定的可以出现在C源程序的文件中的命令。这些命令必须以#开头,结尾不加分号,可以放置在源程序的任何位置,其有效范围是从现在位置开始到源程序文件末尾。2,预处理指令的操作对象是编译器和连接器:用来设置程序编译和链接的各种参数。3.C语言标准提供了多种预处理命令,包括文件包含、宏定义、条件编译。1.宏定义: 1.不带参数的宏定义:#define 宏名 [空格] 字符文本说明:1.宏名按标识符语法取,习惯上用大 阅读全文
posted @ 2013-01-15 09:21 aswater 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 1.动态内存分配函数:(1) void *malloc(size_t size); 返回void * 指针(2) void *calloc(size_t nmemb,size_t size) calloc用于分配n个连续的指定大小的内存空间,每个内存空间的大小为size个字节,总字节为 n*size,分配的空间全部初始化为0例:分配50个int型 int *p=(int *)calloc(50,sizeof(int));2.动态内存调整函数:void *realloc(void *ptr,size_t size);realloc将指针ptr所指向的动态内存空间扩大或缩小size大小,无论扩大或 阅读全文
posted @ 2013-01-15 09:19 aswater 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 1.由于两个函数的作用域不同,因而它们的局部变量互不可见,要想让一个函数能够访问另一个函数里的变量,只能使用指针的间接的访问。2.程序运行时申请的内存空间只有地址,没有名称,因此指针成为访问动态内存的唯一工具,指针直接访问内存的形式简化了许多复杂的数据结构的表示。3.纯指针:void *p; 表明指针变量与地址有关,但不明确存储在此地址上的对象类型,有时称这样的指针为"纯指针"纯指针仍然有自己的内存单元,但它指向的对象不明确。通常,void *指针只有几种有限的用途:1.与另一个指针进行比较2.指向函数传递void *指针或从函数返回void *指针3.给另一个void * 阅读全文
posted @ 2013-01-15 09:18 aswater 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 为了加快数据的存取速度,编译器默认情况下会对结构体成员和结构体本身(实际上其他数据对象也是如此)存储位置进行处理,使其存放的起始地址是一定字节数的倍数,而不是顺序存放,称为字节对齐。设对齐字节数为n(n=1,2,4,8,16...),每个成员内存长度为Li,Max(Li)为最大的成员内存长度。字节对齐规则是:1.结构体对象的起始地址能够被Max(Li)所整除。2.结构体中每个成员相对于起始地址的偏移量,即对齐值是min(n,Li)的倍数。若不满足对齐值的要求,编译器会在成员之间填充若干个字节(称为internal padding)。3.结构体的总长度值是min(n,MAX(Li))的倍数,若不 阅读全文
posted @ 2013-01-15 09:17 aswater 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 作用域是程序中的一段区域。在同一个作用域上,C程序中每个名字都与唯一的实体(意指基本类型和自定义类型)对应;只要在不同的作用域上,那么程序中就可以多次使用同一个名字,对应不同的作用域中的不同实体。一个C语言可以由任意多的源文件组成,每个源文件可以有任意多的函数,在函数中可以包含任意多的复合语句块,复合语句中又可以嵌套任意多的复合语句子块;另外,一个程序还可以有任意多的函数原型、结构体类型和共用体类型声明。所以C语言的作用域分类如下:1.文件作用域:一个C程序的所有源文件,具体到某个文件是指该文件头到文件尾2.函数作用域:函数头到函数尾...}(实际上是函数头和函数体)3.块作用域。4.类型声明 阅读全文
posted @ 2013-01-15 09:14 aswater 阅读(1574) 评论(0) 推荐(1) 编辑
摘要: C源程序经过编译和链接后,成为二进制形式的可执行文件,称为程序映像。可执行文件的采用ELF格式----可执行链接格式存储,内容包含程序指令、已初始化的静态数据和其他一些信息,例如为初始化的静态数据空间大小、符号表、调试信息、动态共享库的链接表等。可执行文件的映像如下(真实的内存分配地址并不如此):所有讨论也仅仅站在程序员的角度。 ************************* * 命令行数据 * * 环境变量数据 * ************************* * 栈 * * ( ... 阅读全文
posted @ 2013-01-15 09:11 aswater 阅读(879) 评论(0) 推荐(0) 编辑
摘要: C#中的程序集形式上是*.exe或*.dll,两者的区别是是否有程序的入口函数。程序集是.NET类型、代码、资源的集合。程序集又可分为动态程序集和静态程序集。动态程序集:程序运行中动态加载到应用程序域(AppDomain),常见的是操作系统中的三大动态链接库kernel.dll,User.dll,Gdi.dll,当然C#中有自己的程序集封装API函数,还记得程序的运行过程么,编译、链接、装入,链接程序将编译后的目标程序和用到的库函数(C++中的Include指令就是用来查找库的)链接在一起形成一个装入模块(可有多个模块)。当然装入又分为绝对装入、可重定位装入、动态运行时装入。绝对装入:程序中给 阅读全文
posted @ 2012-09-09 14:30 aswater 阅读(441) 评论(0) 推荐(0) 编辑
摘要: 首先协変与逆变都是相对于委托来说的,所谓协変就是委托的返回类型是其委托对象(也就是委托函数)的返回类型的父类,类似于C++中的基类指针指向派生类对象,C++中对于子类重写父类的虚函数也有类似的应用。所谓逆变,就是委托的参数类型是其委托对象的参数类型的子类,因为凡是父类可以出现的地方子类都可以代替,继承上子类包含了父类的所有特征。 阅读全文
posted @ 2012-09-09 12:22 aswater 阅读(206) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示