博文

GCC中文使用手册(3)(2005-12-08 12:59:00)

摘要:警告选项(WARNING OPTION)警告是针对程序结构的诊断信息,程序不一定有错误,而是存在风险,或者可能存在 错误. 下列选项控制GNU CC产生的警告的数量和类型: -fsyntax-only 检查程序中的语法错误,但是不产生输出信息. -w 禁止所有警告信息. -Wno-import 禁止所有关于#import的警告信息. -pedantic 打开完全服从ANSI C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的程序. 无论有没有这个选项,符合ANSI C标准的程序应该能够被正确编译(虽然极少数程序需要`-ansi' 选项).然而,如果没有这个选项,某些GNU扩展和传统C特性也得到支持.使用这个选项可以拒绝这些程序.没有理由 使用这个选项,他存在只是为了满足一些书呆子(pedant). 对于替选关键字(他们以`__'开始和结束) `-pedantic'不会产生警告信息. Pedantic 也不警告跟在__extension__后面的表达式.不过只应该在系统头文件中使用这种转义措施,应用程序最好 避免. -pedantic-errors 该选项和`-pedantic'类似,但是显示错误而不是警告. -W 对下列事件显示额外的警告信息:    * 非易变自动变量(nonvolatile automatic variable)可能在调用longjmp时发生改变. 这些警告仅在优化编译时发生. 编译器只知道对setjmp的调用,他不可能知道会在哪里调用longjmp,事实上一个 信号处理例程可以在程序的任何地点调用他.其结果是,即使程序没有问题,你也可能会得到警告,因为无法在可能出现问题 的地方调用longjmp.    * 既可以返回值,也可以不返回值的函数. (缺少结尾的函数体被看作不返回函数值)例如,下面的函数将导致这种警告: foo (a) { if (a > 0) return a; } 由于GNU CC不知道某些函数永不返回(含有abort和longjmp),因此有可能出现 虚假警告.    * 表达式语句或逗号......

阅读全文(3706) | 评论:0

GCC中文使用手册(2)(2005-12-08 12:58:00)

摘要:预处理器选项(Preprocessor Option)下列选项针对C预处理器,预处理器用在正式编译以前,对C 源文件进行某种处理. 如果指定了`-E'选项, GCC只进行预处理工作.下面的某些选项必须和`-E'选项一起才 有意义,因为他们的输出结果不能用于编译. -include file 在处理常规输入文件之前,首先处理文件file,其结果是,文件file的内容先得到编译. 命令行上任何`-D'和`-U'选项永远在`-include file'之前处理, 无论他们在命令行上的顺序如何.然而`-include'和`-imacros'选项按书写顺序处理. -imacros file 在处理常规输入文件之前,首先处理文件file,但是忽略输出结果.由于丢弃了文件file的 输出内容, `-imacros file'选项的唯一效果就是使文件file中的宏定义生效, 可以用于其他输入文件.在处理`-imacrosfile'选项之前,预处理器首先处理`-D' 和`-U'选项,并不在乎他们在命令行上的顺序.然而`-include'和 `-imacros'选项按书写顺序处理. -idirafter dir 把目录dir添加到第二包含路径中.如果某个头文件在主包含路径(用`-I'添加的路径)中没有 找到,预处理器就搜索第二包含路径. -iprefix prefix 指定prefix作为后续`-iwithprefix'选项的前缀. -iwithprefix dir 把目录添加到第二包含路径中.目录名由prefix和dir合并而成,这里 prefix被先前的`-iprefix'选项指定. -nostdinc 不要在标准系统目录中寻找头文件.只搜索`-I'选项指定的目录(以及当前目录,如果合适). 结合使用`-nostdinc'和`-I-'选项,你可以把包含文件搜索限制在显式指定的目录. -nostdinc++ 不要在C++专用标准目录中寻找头文件,但是仍然搜索其他标准目录. (当建立`libg++'时使用 这个选项.) -undef 不要预定义任何非标准宏. (包括系统结构标志). -E 仅运行C预处理器.预处理所有指定的C源文件,结果送往标准输出或指定的输出文件. ......

阅读全文(4180) | 评论:0

GCC中文使用手册(1)(2005-12-08 12:57:00)

摘要:NAMEgcc,g++-GNU工程的C和C++编译器(egcs-1.1.2)   总览(SYNOPSIS)gcc[option|filename ]...
g++[option|filename ]... 警告(WARNING)本手册页内容摘自GNU C编译器的完整文档,仅限于解释选项的含义. 除非有人自愿维护,否则本手册页不再更新.如果发现手册页和软件之间有所矛盾,请查对Info文件, Info文件是权威文档. 如果我们发觉本手册页的内容由于过时而导致明显的混乱和抱怨时,我们就停止发布它.不可能有其他选择,象更新Info文件同时更新man手册,因为其他维护GNU CC的工作没有留给我们时间做这个. GNU工程认为man手册是过时产物,应该把时间用到别的地方. 如果需要完整和最新的文档,请查阅Info文件`gcc'或Using and Porting GNU CC (for version 2.0) (使用和移植GNU CC 2.0) 手册.二者均来自Texinfo原文件 gcc.texinfo. 描述(DESCRIPTION)C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定: gcc 认为预处理后的文件(.i)是C文件,并且设定C形式的连接. g++ 认为预处理后的文件(.i)是C++文件,并且设定C++形式的连接. 源文件后缀名指出语言种类以及后期的操作: .c C源程序;预处理,编译,汇编 .C C++源程序;预处理,编译,汇编 .cc C++源程序;预处理,编译,汇编 .cxx C++源程序;预处理,编译,汇编 .m Objective-C源程序;预处理,编译,汇编 .i 预处理后的C文件;编译,汇编 .ii 预处理后的C++文件;编译,汇编 .s 汇编语言源程序;汇编 .S 汇编语言源程序;预处理,汇编 .h 预处理器文件;通常不出现在命令行上 其他后缀名的文......

阅读全文(3031) | 评论:0

GCC 使用指南(2005-12-08 12:51:00)

摘要:使用语法:
gcc [ option | filename ]... 
  g++ [ option | filename ]...  其中 option 为 gcc 使用时的选项(后面会再详述), 
  而 filename 为欲以 gcc 处理的文件  说明:
这 C 与 C++ 的 compiler 已将产生新程序的相关程序整合起来。产 
生一个新的程序需要经过四个阶段:预处理、编译、汇编、连结,而这两 
个编译器都能将输入的文件做不同阶段的处理。虽然原始程序的扩展名可 
用来分辨编写原始程序码所用的语言,但不同的compiler,其预设的处理 
程序却各不相同:  gcc  预设经由预处理过(扩展名为.i)的文件为 C 语言,并於程式 
      连结阶段以 C 的连结方式处理。 g++  预设经由预处理过(扩展名为.i)的文件为 C++ 语言,并於程 
序连结阶段以 C++ 的连结方式处理。  原始程序码的扩展名指出所用编写程序所用的语言,以及相对应的处 
理方法:    .c  C 原始程序         ;  预处理、编译、汇编 
  .C  C++ 原始程序        ;  预处理、编译、汇编 
  .cc  C++ 原始程序        ;  预处理、编译、汇编 
  .cxx C++ 原始程序        ;  预处理、编译、汇编 
  .m  Objective-C&n......

阅读全文(2815) | 评论:0

SIP协议全方位概要介绍(2005-12-08 09:34:00)

摘要:   摘要:SIP协议是NGN中的重要协议,越来越得到业界的重视。本文通过SIP协议的背景、功能、网络元素、实现机制、以及SIP消息的组成等几个方面对SIP协议做了全方位的概要性介绍,以使读者对SIP有初步的概念和认识。

    一、SIP协议的背景和功能

    SIP( 会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务。因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系列协议中重要的一员。

    SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的。它用来建立,改变和终止基于IP网络的用户间的呼叫。为了提供电话业务它还需要结合不同的标准和协议:特别是需要确保传输(RTP),与当前电话网络的信令互连,能够确保语音质量(RSVP),能够提供目录(LDAP),能够鉴权用户(RADIUS)等等。

    SIP被描述为用来生成,修改和终结一个或多个参与者之间的会话。这些会话包括因特网多媒体会议,因特网(或任何IP网络)电话呼叫和多媒体发布。会话中的成员能够通过多播或单播联系的网络来通信。SIP支持会话描述,它允许参与者在一组兼容媒体类型上达成一致。它同时通过代理和重定向请求到用户当前位置来支持用户移动性。SIP不与任何特定的会议控制协议捆绑。

    本质上,SIP提供以下功能:

    名字翻译和用户定位:无论被呼叫方在哪里都确保呼叫达到被叫方。执行任何描述信息到定位信息的映射。确保呼叫(会话)的本质细节被支持。

    特征协商:它允许与呼叫有关的组(这可以是多方呼叫)在支持的特征上达成一致(注意:不是所有方都能够支持相同级别的特征)。例如视频可以或不可以被支持。总之,存在很多需要协商的范围。

&nbs......

阅读全文(4383) | 评论:0

VoIP基本概念(2005-12-08 09:32:00)

摘要:1. 何谓VoIP
VoIP(Voice over Internet Protocol)指的是将模拟的声音讯号经过压缩与封包之后,以数据封包的形式在IP Network的环境进行语音讯号的传输。 2. 何谓NGN
下一代网络(NGN,Next Generation Network)是集话音、数据、传真和视频业务于一体的全新的网络,其核心控制设备是软交换(SoftSwitch)。 3. 传统电话特点
传统的电话是透过PSTN(Public Switched Telephone Network)网络,通过电信局做电路交换(Circuit Switched)的工作来传送讯号。所谓电路交换如同字面所述,就是使用交换机(PBX)或是局线(CO)把两点或是多点之间通路接起来。在通话的同时,这条通路是"专门" 且"持续"的,因此频宽的使用效率较差,加上国际间电信业者昂贵的拆帐费用及设备成本,使得国际电话资费一直居高不下。 4. 传统电话的缺点
传统的基于TDM的PSTN 话音网,虽然可以提供64 kbps的业务,但业务和控制都是由交换机来完成的。这种技术虽然保证语音有优良的品质,但对新业务的提供需要较长的周期,面对日益竞争的市场显得力不从心。 5. 软交换技术的优点
软交换技术实现了业务的融合,吸取了IP、ATM、IN和TDM等众家之长,形成了分层的全开放体系结构,是一个革命性的突破。软交换的组网方案对新老运营公司都有利。传统运营公司用它实现PSTN与IP数据网的融合,保护传统投资,又具有创新能力;而新公司利用它可以较容易地进入竞争激烈的通信业务市场,不需对传统设备进行巨大投资,没有资金压力。
软交换技术结合了传统的语音网络的可靠性和新兴的IP技术的灵活性与有效性的优点,能使现有公共交换电话网的能力发挥得淋漓尽致,并使它稳步地实现向IP数据网的转移。 6. SoftSwitch概念
在传统电路交换网中,呼叫控制、业务提供以及交换矩阵均集中在一个交换系统中,而软交换的主要设计思想是业务/控制与传送/接入分离,各实体之间通过标准的协议进行连接和通信,以便在网上更加灵活地提供业务。具体地讲,软交换是一个基于软件的分布式交换/控制平台,它将呼叫控制功能从网关中分离出来,开放业务、控制、接入和交换间的协议,......

阅读全文(4197) | 评论:0

qsort函数应用大全(转)(2005-12-08 09:29:00)

摘要:

七种qsort排序方法

<本文中排序都是采用的从小到大排序>

一、对int类型数组排序

int num[100];

Sample:

int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}

qsort(num,100,sizeof(num[0]),cmp);

二、对char类型数组排序(同int类型)

char word[100];

Sample:

int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}

qsort(word,100,sizeof(word[0]),cmp);

三、对double类型数组排序(特别要注意)

double in[100];

int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}

qsort(in,100,sizeof(in[0]),cmp);

四、对结构体一级排序

struct In
{
double data;
int other;
}s[100]

//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写

int cmp( const void *a ,const void *b)
{
return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
}

qsort(s,100,sizeof(s[0]),cmp);

五、对结构体......

阅读全文(4907) | 评论:2

C++ STL简介(2005-12-07 21:35:00)

摘要:
一、STL简介
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下笔者就简单介绍一下STL各个部分的主要特点。

二、算法
大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的――你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。

STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。

算法部分主要由头文件<a......

阅读全文(3751) | 评论:0

热烈祝贺湖南大学ACM/ICPC Judge Online正式开放(2005-12-18 21:13:00)

摘要:   http://acm.hnu.cn 热烈祝贺湖南大学ACM/ICPC Judge Online正式开放,因为刚开放Judge,需要练习题,因此邀请校内,校外老师、同学们参与试题库建设。 赛题征集公告     学校计划从下学期开始举行月赛,给与优胜者与一定的奖励,届时将会有通知。目的是培养学生对计算机算法/程序的兴趣。同时也希望,我们同学们能够有兴趣热情参与。  另外:从本学期开始,部分计算机相关课程将在Judge Online上对学生的课程设计进行评测。   [New] 2005-12-17 : 新增UD Contest题目,欢迎大家提交。 [New] 2005-12-12 : 新增Pacific NW Region Contest题目,欢迎大家提交。 [New] 2005-12-11 : 新增SDOI,JLOI和SCOI经典题目,欢迎大家提交。 [New] 2005-12-7 : http://acm.hnu.cn 正式开放. [New] 2005-12-4 : 预计下月举行湖南大学校内首次月赛,作为新人选拔赛,参加过ACM/ICPC赛事的队员无参赛资格。 [New] 2005-12-1 : 添加湖南大学首届程序设计大赛题目,The 2005 1st Hunan University Programming Contest  Attach : Problems Document。    注意:关于Judge Online的使用,请参考FAQs,  如果FAQ中没有,可以在Discuss Board提出来。    说明:为了注册,提交方便,课程验证暂时取消,可以自由提交。  ......

阅读全文(8638) | 评论:2

使用MFC在应用程序中嵌入MS Word(2005-12-07 20:40:00)

摘要:    摘要:这篇文章着重讲述了如何使用MFC将Microsoft Word嵌入到应用程序中的方法。对在VC下使用类型库和COM技术也做了简要阐述。

  关键字:VC++、MFC、COM、自动化

  一、 引言

  Microsoft Office办公套件以其功能强大、方便实用而被广泛使用。我们可以使用自动化作为Word用以把其功能显露给其他应用的方式,采用这种方式可以尽可能少的占用自动化客户的资源,并且不需要被访问对象的类型信息就可以进行调用。

  二、 创建工程

  以下是创建这个MFC应用程序的步骤:

  (一)使用AppWizard创建一个新的MFC AppWizard(EXE)工程,命名为"Embed_Word"

  (二)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持。 其它都为默认。在ClassView中将产生如下类:

  应用类: CEmbed_WordApp in Embed_Word.h and Embed_Word.cpp

  框架类: CMainFrame in MainFrm.h and MainFrm.cpp

  文档类: CEmbed_WordDoc in Embed_WordDoc.h and Embed_WordDoc.cpp

  视图类: CEmbed_WordView in Embed_WordView.h and Embed_WordView.cpp

  容器类: CEmbed_WordCntrItem in CntrItem.h and CntrItem.cpp
 
  (三)在View菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 在Office目录中选中Microsoft Word 97/2000 类型库Word8.olb或Word9.olb,会将把类型库中的所有类添加到你的工程中。这时,ClassView中会多出几十个类,可以通过这些类提供的接口来实现必要的功能。

  (四)在CC......

阅读全文(4779) | 评论:0