摘要: 1基本解释  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。  另外,extern也可用来进行链接指定。使用extern时候要严格对应声明时的格式。  extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。2问题:extern“C”  在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?  C++语言在编译的时候为了解决函数的多态问题,会将函数 阅读全文
posted @ 2010-08-24 23:49 浪里飞 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 求两个大整数的相乘问题日常常见的就是两个大整数相乘了。前面日志中曾经做过大数阶乘问题。其实问题都类似。只是前面当时用的是重复相加而得结果,然而,如果阶乘很大的话,重复相加也不能解决问题的,必须用数组来进行存储,然后模拟小学时竖式相乘的思想,即在一个数组中每个元素都只能是0~9,如果超越了这个界限,则进位到高位。在处理这个问题中,为了更好的思维,我们将其倒序,最后倒序输出。【问题】阶乘计算http:... 阅读全文
posted @ 2010-08-24 23:39 浪里飞 阅读(773) 评论(0) 推荐(0) 编辑
摘要: 加载套接字库AfxSocketInit一、相关概念线程同步的方法,除了上节介绍的互斥对象外,还有事件对象和关键代码段。1、事件对象时间对象也属于内核对象,包含:一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是为通知状态的布尔值有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件,当人工重置的事件得到通知时,... 阅读全文
posted @ 2010-08-21 23:44 浪里飞 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 我们利用互斥对象来实现线程同步。互斥对象(mutex)属于内核对象,它能够确保线程拥有对单个资源的互斥访问权。互斥对象包含一个使用数量,一个线程ID和一个计数器。ID用于标识系统中的哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数。创建互斥对象:HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,//SDBOOLbIni... 阅读全文
posted @ 2010-08-12 23:39 浪里飞 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 一、概念1、进程:通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。一个程序可以有多个进程实例。2、进程由两个部分组成:1)操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。2)地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。进程从来不执行任何东西,它只是线程的容器。若要使... 阅读全文
posted @ 2010-08-12 23:11 浪里飞 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 一、一些概念套接字是表示了通信的端点。网络通信中,使用“连接”作为最基本的抽象,同时将TCP连接的端点称为套接字。套接字=(IP,端口)二、连接过程服务器端(接收端)程序:1、创建套接字(socket)。2、将套接字绑定到一个本地地址和端口上(bind)。3、等待接收数据(recvfrom)。4、关闭套接字。客户端(发送端)程序:1、创建套接字(socket)。2、向服务器... 阅读全文
posted @ 2010-08-12 22:38 浪里飞 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 在C语言中,程序可在任意花括号后定义变量,在C++中,允许在程序中任何地方声明变量,它的优点是可在使用该变量附近定义他。当在一个块内定义了一个变量,这个变量的作用域是从定义点起到当前块的结束以及所有在当前块中出现的子块。作用域:变量名有效的范围。生存期:变量在程序中存在的时期(全局,局部两种)。存储方式:auto,register,extern,static存储空间类型:栈(stack):自动分配... 阅读全文
posted @ 2010-08-03 22:22 浪里飞 阅读(678) 评论(3) 推荐(0) 编辑
摘要: 在程序设计实践一书中,作者说如下程序会出问题:intmain(){charbuf[20];gets(buf);if(...)}这是因为gets不限制读入数据的长度,所以应当由fgets来代替。这一点本人同意。但是作者有一个观点,本人不能赞同。作者说,如果gets中读入的数据太多,可能会把函数(gets)的返回地址也覆盖。我们都知道,函数的返回地址在栈中,就本程序而言,其在栈中的位置的地址肯定比bu... 阅读全文
posted @ 2010-08-03 22:15 浪里飞 阅读(354) 评论(2) 推荐(0) 编辑
摘要: 我想接着讨论一下,如果是数组,那么他与其它变量在栈上是如何分配存储顺序的。我们已经知道,栈是从高地址到低地址生长,而数组是从低地址到高地址生长,那么,这两种不同的生长方式如何相容呢?于是我们设计如下程序。#include"iostream"usingnamespacestd;intmain(){charch1='a';chararr[5];charch2='b';cin>>arr;pr... 阅读全文
posted @ 2010-08-03 22:01 浪里飞 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 2)接下来,我们将讨论第二个问题,那就是函数返回值与参数在栈上存放顺序。我们设计如下程序:#include"iostream"usingnamespacestd;inttest(inta,intb){intc;printf("%p\n",&b);//最后一个参数printf("%p\n",&a);//第一个参数printf("%p\n",&c);//函数的返回值地址retu... 阅读全文
posted @ 2010-08-03 21:34 浪里飞 阅读(1402) 评论(2) 推荐(0) 编辑