三星650三星850 120g固态硬盘盘用英语怎么说

C语言中函数的声明、定义及使用的入门教程
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C语言中函数的声明、定义及使用的入门教程,重点讲述了main函数的相关知识,需要的朋友可以参考下
对函数的“定义”和“声明”不是一回事。函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型以及函数体等,它是一个完整的、独立的函数单位。而函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体。——谭浩强 ,《C程序设计》(第四版),清华大学出版社,2010年6月,p182
这段论述包含了许多概念性错误,这些概念错误在许多C语言书中都同样普遍存在。为了说明这些错误,首先来回顾一下C语言演变和发展的一些情况。
最早,C语言的代码可以这样写:
printf("hello,world!\n");
注意,这段代码对标识符printf没有进行任何说明。这是因为printf()函数的返回值为int类型。当时的C语言规定,对于没有任何说明的函数名,编译器会默认为返回值为int类型,因此对这样的函数名可以不做任何说明。那个时期的C语言,很多情况下int可以不写。例如main()函数返回值的类型为int就可以不写。
但是需要特别说明的是,这种“省劲”的写法已经过时,从C90标准起,这种写法就步入了被逐步抛弃的过程(尽管当时还没有完全立即废止)。C99废除了隐式函数声明法则(remove implicit function declaration),另外,省略main()前面的int也已经不再容许了。
在C语言早期,尽管有时不需要对函数名进行说明,但有些情况下对函数名进行说明还是必须的,比如:
double sqrt();
int main()
printf("%f\n" , sqrt(9.) );
这是因为函数sqrt()返回值的类型不是int类型而是double类型,编译器编译时需要知道sqrt(9.)这个表达式的类型。
不难注意到这种对函数名的说明非常简单,这是最早期的一种函数类型说明的形式。这种说明只着重说明函数名是一个函数及其返回值类型,如果程序员在调用函数时存在参数类型或个数方面的错误编译器是无法察觉的,因为函数类型说明中“()”内没有任何信息。
这种办法只说明了函数名与()进行运算的结果也就是函数返回值的数据类型,无法进一步检查参数方面的错误是这种写法的不足之处。
如果不写函数类型说明,也可以把函数定义写在函数调用之前:
double square ( double x)
return x *
int main(void)
printf("%f\n" , square(3.) );
这表明函数定义也具有对函数名的类型加以说明的效果,因此从这个意义上来说,函数定义也是一种对函数类型的说明。这种办法可以检查出函数调用时在参数个数和类型方面的错误。
但是,用这种办法说明函数名并不好,因为这样做在编程时还需要考虑应该把哪个函数定义写在前面,哪个写在后面的问题。假如函数A调用函数B,函数B调用函数C,函数C又调用函数A,究竟如何安排函数定义的顺序就会让人感到无所适从。此外这种办法也不利于代码的组织,在由多个源文件组成的源程序时,这种写法就更会捉襟见肘、漏洞百出。因此,在1990年,C标准借鉴C++语言规定了一种新的说明函数名的方法,这就是函数原型(Function Propotype)式说明函数类型的方法:
double square ( double ); //或 double square ( double x)
int main(void)
printf("%f\n" , square(3.) );
double square ( double x)
return x *
使用这种办法,不但可以检查函数调用时参数类型和个数方面的错误,同时解决了源代码的组织问题,因为程序员不必再考虑该把哪个函数写在前面、哪个写在后面这种无聊的问题了。这种办法全面地说明了函数名的数据类型。此外要说明的是,把形参及其数据类型写在“()”内形式的函数定义也属于函数原型(Function Propotype)的范畴。
由此可见,古老的、不对参数进行任何说明的函数类型说明方式、函数定义以及函数原型式的函数类型说明方式都具有说明函数名意义的效用。从这个意义上讲它们都是函数声明。在C语言中,声明(Declaration)这个词的本义就是指定标识符的意义和性质(A declaration specifies the interpretation and attributes of a set of identifiers.),某个标识符的定义(Definition)同时也是这个标志符的“声明”(Declaration)。函数定义(Function definition)则意指包括函数体。(A definition of an identifier is a declaration for that identifier that: ……for a function, includ)。函数原型则特指包括说明参数类型的函数声明,它同样包含用这种方式写出的函数定义。
现在回过头来看样本中的第一句话:“对函数的“定义”和“声明”不是一回事”。由于函数定义本身就是一种函数声明,怎么可以说它们不是一回事呢?这句话的逻辑就如同说“男人”和“人”不是一回事。你可以说男人和女人不是一回事,因为他们没有交集。但没法说男人和人不是一回事,因为男人是人的子集,男人就是人的一种,怎么可以说男人和人不是一回事呢?
那么,不带函数体的函数声明应该如何称呼呢?在C语言中,它们叫被做“函数类型声明”(Function type declaration)。函数类型声明最主要的特点是声明了函数名是一个函数及其返回值的类型,如果也声明了参数的类型,则是函数原型式的函数类型声明。
样本中的“而函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体”这句话同样不通。其主要错误是它混淆了“函数原型式类型声明”与“函数声明”这两个概念,前一个概念只是后一个概念的子集。函数声明中不但包含“函数类型声明”,也包含“函数定义”和老式的“函数类型声明”。由于函数定义本身就是一种函数声明,所以无法断定函数的声明是否包括函数体;而且老式的函数类型声明(例如double sqrt();)也属于函数声明,这种函数声明并不检查参数类型及个数方面的错误。此外函数声明也并没有检查“函数名”正确与否的功能。
这段文字中的“函数类型”这个概念也有错误,函数类型所描述的不但包括函数返回值类型,也可能一并描述参数的个数和类型(如果是函数原型),因此不能与“形参的类型、个数”相提并论。
现代的C语言的函数定义和函数类型声明都采用函数原型式的风格,C99把旧的非原型形式视为过时,这意味着非原型形式以后可能被禁止。
main()函数
在各种C语言书上,能看到各式各样main()函数的写法,简直令人无所适从,这是这么回事?原因主要有两个:一个是随着C语言的发展和演化,main()函数的写法也在不断变化;另外,某些书籍写法不规范或误导的现象也同时存在。
最初main()函数的写法非常简洁,那个时候的C程序员哪怕一个字符似乎都不肯多写。不知道是因为当时键盘质量不好还是因为编辑器太糟糕的缘故,那个时代的C程序员似乎惊人地一致崇尚“简约”——甚至可以说是“至简”。
printf("hello,world\n");
这就是main()函数最古老的写法,K&R在他们的经典名著《The C Programming Language》中的第一个C语言源程序(1978)。这种写法是那个时代的主流。
简直和裸体差不多,连#include&stdio.h&也没有么?在《The C Programming Language》的第一版中确实没有。那个时代的C语言,返回值类型为int的函数不用声明。不过在该书的第二版(1988)中这个程序被改成了:
#include &stdio.h&
printf("hello,world\n");
返回值类型为int的函数不用声明的规则改变了吗?规则没有改变。改变了的是观念,人们已经不再倾向于代码的“至简”,而开始倾向于在代码中交代清楚每一个标识符的来龙去脉。从C89开始倡导在函数调用之前一定要有函数声明,但并没有强求,而在C99这已经是强制性的要求了。由于《The C Programming Language》第二版正值ANSI C标准颁布(1989)前夕出版,所以这种变化也应该视为ANSI C标准的倾向性以及K&R对新标准的认同。尽管这个例子没有完全反映出来这种认同。
为什么说没有完全反映出来这种认同呢?因为这个main()的定义并没有按照函数原型(Function prototype)的方式来写,C90中规定不带参数的main()函数应该这样写:
int main(void) { /*. . .*/}
但同时规定那个int可以省略。C90把()内不写任何内容视为过时的写法,尽管C90无奈地容忍了它(The use of function declarators with empty parentheses (not prototype-format parameter type declarators) is an obsolescent feature.)。
为什么要容忍?因为有许多老式的代码还在用。
如果以C99的标准看这个main()写得如何呢?C99不容许省略int。但同样只把()内不写任何内容视为过时,而没有完全禁止,可见习惯力量的顽固。
那又为什么说K&R对新标准的认同呢?《The C Programming Language》第二版中的其他函数定义和函数类型声明基本上都改成了函数原型风格。比如,在讲解main()函数的参数时,K&R把原来的main()函数
#include &stdio.h&
main(argc,argv)
char *argv[];
#include &stdio.h&
main(int argc, char *argv[])
前一个写法今天已经差不多绝迹,后一个main()以今天的眼光来看有些奇怪,main()的参数是用函数原型风格写的,但却没有写main()返回值的类型,给人有点半新半旧的感觉。尽管不能说它违背C90(因为C90容许不写main()前面的int),但如果写上了返回值的类型int,就同时满足现代C99标准的要求了。
这里出现的“return 0;”是怎么回事?这在现代C语言中已经是司空见惯了,它返回给操作系统一个值以表明程序是在何种状态下结束的。但在另一段代码中,K&R似乎又走得太远:
#include &stdio.h&
main(int argc,char *argv[])
int found = 0 ;
/*……计算found的值 */
这个实在有些“标新立异”,居然把计算结果返回给了操作系统,颇有突破常规之嫌。
那前面几个没有“return 0;”的main()函数会怎么样?按照C90标准,会返回一个不确定的int类型的值,如果确实不关心这个返回值是多少,不写确实可以。但C99却要求编译器在编译的时候帮忙给补上这个“return 0;”,C99在必须写int这个问题上没有迁就懒人,但在这里却对偷懒的做法给予了迁就。 问:如果确实不关心main()函数的返回值,把main()的返回值定义为void类型如何?我看到许多书上都这样写的。
#include &stdio.h&
void main()
printf("This is a C program.\n");
这在C99之前是一种野路子写法,究竟从哪里冒出来的,无据可考。但前几年的主流教科书中这种写法很常见。K&R(C语言的发明者)没有这样写过,C90国际标准也不承认这种写法。Bjarne Stroustrup(C++语言的创始人)在他的关于C++的FAQ中,在回答是否可以写“void main()”时愤怒地回答说这种写法在C++和C中都不曾有过。事实上,很多C语言专家都认为“void main()”非常邪恶。
因此,在C99之前,这是不符合标准的写法。尽管这段代码的功能似乎是输出“This is a C program.”,但其实却不是一个“C program”。
但是有时这样写并没有产生错误啊?首先,C语言的错误不一定反应在编译、链接或运行过程中。你输出一个垃圾值也可能一路通过编译、链接或运行,但这不说明你的代码没有错误,更不能说明这样的代码正确、有意义。其次,这样的写法在有些编译器下程序会产生崩溃或得到警告。这说明这种写法至少不普遍性适用的。可以说,如果不是C99标准,这种写法根本没有立锥之地。
C99给了这种写法以立足之地么?从某种意义上也许可以这样理解。因为K&R没承认过这种写法,C90根本不承认这种写法,C99虽然没有正式承认这种写法,但为这种写法留了一个后门:“It shall be defined ……or in some other implementation-defined manner”。这意思就是说,如果编译器明确声称允许void main()这种写法的话,那么C99不再象C90那样简单认为这种写法违背C标准。
但是不管怎么说,这种写法最多是某些编译器的一种“方言土语”,如果没有特殊理由,比如仅仅是工作在某个特殊环境,且仅仅使用特定的编译器而根本不考虑程序的可移植性,为什么不写普遍适用的形式呢?
既然很多C语言专家都认为“void main()”非常邪恶,C99为什么包容这种写法呢?很难确定C99是否就是打算专门想把这种写法也“收容”在标准之列。因为除了void main(),还有另外一些main()函数的写法被C90排除在标准之外了。而现在,这些写法在理论上也具备了符合C99标准的可能性。
还有什么样的main()函数?很多编译器都支持下面的main()的写法:
int main(int argc, char *argv[], char *env[])
居然有3个形参,那个env是做什么用的?那个参数可以使程序获得环境变量。
什么叫环境变量?简单地讲可以理解为操作系统记录的一些数据,比如计算机的名字,操作系统放在哪里等等。应用程序在运行时可能要用到这些信息,这时可以通过env这个参数来获得。
如果编译器不支持main()的第三个参数怎么办?标准库函数也可以达到同样的目的。
#include &stdlib.h&
char *getenv(const char *name);
是否可以说void main()和int main(int argc, char *argv[], char *env[])也符合C99标准呢?恐怕还不能这么说,现在只是不能说这两种写法一定不符合C99标准。但这两种写法不符合C90标准是确定的,这两种写法的可移植性很差也是确定无疑的。C99标准在这里写的很模糊,没有进一步界定“implementation-defined manner”的含义。除非编译器声明遵守C99标准,且容许这两种写法,否则断言这两种写法符合C99标准属于空穴来风。
有人说“C99建议把main函数指定为int型”,这种说法对吗?显然不对。因为C99并非绝对不包容返回值非int类型的main()。正确的说法是,C90要求main()函数的返回值一定得是int型。但C90容许不写那个int,而C99则要求必须写上这个“int”。
下面这种风格如何?
#include &stdio.h&
int main()
printf("This is a C program.\n");
这个写法有点不伦不类。返回值的类型int写了,这个和C89的倡导或C99的要求一致,但是()里面什么都不写,又与标准的所倡导的风格不符,所以说不伦不类。这种写法目前的标准依然容许,但属于标准目前尚能容忍的但即将过时的(obsolescent)写法,被抛弃只是早晚的问题。这种写法就如同古代的函数形参的写法一样:
main(argc,argv)
char *argv[];
都属于历史的垃圾。
见过在main()的函数体的“}”之前前写一句getch();,这个是怎么回事?这个是时代的产物。在PC从DOS时代转变为Windows时代的过程中,DOS时代开发的IDE(主要是TC)无法在运行程序后显示输出结果,为了在运行后从容仔细地观察一下运行结果再返回IED界面,加上了这么一句,人为地延长程序运行时间(因为getch()会等待用户输入一个字符)。但这与main()本身的结构无关。这条语句不具备普遍意义,只是将就过时的IDE的一种权宜之计而已。所谓不具备普遍意义是指,第一,真正的程序往往不需要这条语句,就是说这条语句与程序功能无关;第二,getch()这个函数并不是标准函数,只有个别的编译器才支持它,在其他编译器上写这条语句,很可能行不通。
为什么不用getchar()这个标准库函数呢?getchar()的功能和getch()有点区别,前者会在标准输出设备上显示用户键入的字符,这显得很不利索,而后者则不会显示用户所键入的字符,更接近“Press Any Key to continue……”的效果。
有的代码在main()函数结束前写system("PAUSE");,是否也是这个意思?是的。这也是一种人工制造的“请按任意键继续. . .”,与程序功能结构无关,只是为了方便地观察输出结果。但是这种写法比调用getch()要好,因为system()函数是标准库函数,各个编译器都提供支持。
有一种说法,“在最新的C99标准中,只有以下两种定义方式是正确的:”
int main( void )
int main( int argc, char *argv[] )
这种说法对吗?
这种说法显然不对。但可以确认的是这两种定义方式一定正确。不但在C99来说是正确的,以C89来说也是正确的。
还有一种写法:
int main( void )
return EXIT_SUCCESS;
那个EXIT_SUCCESS是怎么回事?
return EXIT_SUCCESS;是与return 0;等价的一种文雅的写法。EXIT_SUCCESS是在stdlib.h中定义了的符号常量,返回这个值表示程序任务完成后程序退出。在stdlib.h定义的另一个符号常量EXIT_FAILURE,通常用于程序无法完成任务而退出。
实在太眼花缭乱了,需要记住这么多吗?显然没必要。很多东西都是历史原因遗留下的垃圾。
如果学习C语言,应该记住或使用哪种呢?显然是:
int main( void )
int main( int argc, char *argv[] )
第一,他们普遍适用,不存在可移植性的问题;
第二,就目前看,他们不存在任何过时或即将过时的成分。当然,如果喜欢文雅,不写return 0;而写EXIT_SUCCESS也可以。 顺便说一句,有的学习者记不住带参数main()函数两个形参的名字。其实这两个形参的名字也可以自己取,不一定用那两个名字,只要记住类型就可以了。第二个参数的类型也可以是char **,这和原来的是等价的。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具C语言中位段的使用方法的分析
我的图书馆
C语言中位段的使用方法的分析
位段以位为单位定义结构体(或共用体)中成员所占空间的长度。
  含有位段的结构体类型称为位段结构。
  位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。
  位段结构中位段的定义格式为:
  unsigned &成员名&:&二进制位数&
  例如:
  struct bytedata
  {unsigned a:2; /*位段a,占2位*/
  unsigned:6; /*无名位段,占6位,但不能访问*/
  unsigned:0; /*无名位段,占0位,表下一位段从下一字边界开始*/
  unsigned b:10; /*位段b,占10位*/
   /*成员i,从下一字边界开始*/
  位段数据的引用:
  同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。
  例如:data.a=2; 但 data.a=10;就超出范围(a占2位,最大3)
  关于位段数据,注意以下几点:
  (1)一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。
  (2)可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。
  (3)可以定义无名位段。
  (4)位段的长度不能大于存储单元的长度。
  (5)位段无地址,不能对位段进行取地址运算。
  (6)位段可以以%d,%o,%x格式输出。
  (7)位段若出现在表达式中,将被系统自动转换成整数。
  -------------------------------------------------------
  C语言中用结构实现位段--个人心血!值得一看哦!C语言中的结构是有实现位段的能力的,噢!你问它到底是什么形式是吧?这个问题呆会给你答案。让我们先位段的作用:位段是在字段的声明后面加一个冒号以及一个表示字段位长的整数来实现的。这种用法又被就叫作“深入逻辑元件的编程”,如果你对系统编程感兴趣,那么这篇文章你就不应该错过!
  我把使用位段的几个理由告诉大家:1、它能把长度为奇数的数据包装在一起,从而节省存储的空间;2、它可以很方便地访问一个整型值的部分内容。
  首先我要提醒大家注意几点:1、位段成员只有三种类型:int ,unsigned int 和signed int这三种(当然了,int型位段是不是可以取负数不是我说了算的,因为这是和你的编译器来决定的。位段,位段,它是用来表示字段位长(bit)的,它只有整型值,不会有7.2这种float类型的,如果你说有,那你就等于承认了有7.2个人这个概念,当然也没有char这个类型的);2、成员名后面的一个冒号和一个整数,这个整数指定该位段的位长(bit);3、许多编译器把位段成员的字长限制在一个int的长度范围之内;4、位段成员在内存的实现是从左到右还是从右到左是由编译器来决定的,但二者皆对。
  下面我们就来看看,它到底是什么东西(我先假定大家的机器字长为32位):
  Struct WORD
  unsigned int chara: 6:
  unsigned int font : 7;
  unsigned int maxsize : 19;
  Struct WORD
  这一段是从我编写的一个文字格式化软件摘下来的,它最多可以容纳64(既我说的unsigned int chara :6; 它总共是6位)个不同的字符值,可以处理128(既unsigned int font : 7 ;既2的7次方)种不同的字体,和2的19次方的单位长度的字。大家看到maxsize是19位,它是无法被一个short int 类型的值所容纳的,我们又可以看到其余的成员的长度比char还小,这就让我们想起让他们共享32位机器字长,这就避免用一个32位的整数来表示maxsize的位段。怎么样?还要注意的是刚才的那一段代码在16位字长的机器上是无法实现的,为什么?提醒你一下,看看上面提醒的第3点,你会明白的!
  你是不是发现这个东西没有用啊?如果你点头了,那你就错了!这么伟大的创造怎么会没有用呢(你对系统编程不感兴趣,相信你会改变这么一个观点的)?控制器大家应该知道吧?软驱与它的我们来看看是怎么实现的下面是一个磁盘控制器的寄存器:
  │←5→│←5→│←9→│←8→│←1→│←1→∣←1→∣←1→∣←1→∣
  上面位段从左到右依次代表的为:5位的命令,5位的扇区,9位的磁道,8位的错误代码,1位的HEAD LOADED,1位的写保护,1位的DISK SPINNING,1位的错误判断符,还有1位的READY位。它要怎么来实现呢?你先自己写写看:
  struct DISK_FORMAT
  unsigned int command : 5;
  unsigned sector : 5;
  unsigned track : 9 ;
  unsigned err_code : 8;
  unsigned ishead_loaded : 1;
  unsigned iswrit_ : 1;
  unsigned isdisk_spinning : 1;
  unsigned iserr_ocur : 1;
  undigned isready :1 ;
  注:代码中除了第一行使用了unsigned int 来声明位段后就省去了int ,这是可行的,详见ANCI C标准。
  如果我们要对044c18bfH的地址进行访问的话,那就这样:
  #define DISK ((struct DISK_FORMAT *)0x044c18bf)
  DISK-&sector=fst_
  DISK-&track=fst_
  DISK-&command=WRITE;
  当然那些都是要宏定义的哦!
  我们用位段来实现这一目的是很方便的,其实这也可以用移位或屏蔽来实现,你尝试过就知道哪个更方便了!
TA的最新馆藏[转]&C语言中如何高效使用 Turbo C
学历类|       外语类|     
资格类|       财会类|     
|      医学类|     
计算机|    |        
&&-&&-&&-&&-&正文
C语言中如何高效使用&Turbo&C
编辑:zhanghaifeng 【字体:小 大】
所谓配置文件是包含Turbo C 2.0有关信息的文件, 其中存有编译、连接的选择和路径等信息。
所谓配置文件是包含Turbo C 2.0有关信息的文件, 其中存有编译、连接的选择和路径等信息。可以用下述方法建立Turbo C 2.0的配置:1. 建立用户自命名的配置文件可以从Options菜单中选择Options/Save options命令, 将当前集成开发环境的所有配置存入一个由用户命名的配置文件中。下次启动TC时只要在DOS下键入:tc/c&用户命名的配置文件名&就会按这个配置文件中的内容作为Turbo C 2.0的选择。2. 若设置Options/Environment/Config auto save 为on, 则退出集成开发环境时, 当前的设置会自动存放到Turbo C 2.0配置文件TCCONFIG.TC中。Turbo C 在启动时会自动寻找这个配置文件。3. 用TCINST设置Turbo C的有关配置, 并将结果存入TC.EXE中。Turbo C 在启动时, 若没有找到配置文件, 则取TC.EXE中的缺省值。主菜单 在Turbo C 2.0主屏幕顶上一行, 显示下列内容:File Edit Run Compile Project Options Debug Break/watch除Edit外, 其它各项均有子菜单, 只要用Alt加上某项中第一个字母(即大写字母), 就可进入该项的子菜单中。一、File(文件)菜单按Alt+F可进入File菜单, 该菜单包括以下内容:.Load(加载)装入一个文件, 可用类似DOS的通配符(如*.C)来进行列表选择。也可装入其它扩展名的文件, 只要给出文件名(或只给路径)即可。该项的热键为F3, 即只要在主菜单中按F3即可进入该项, 而不需要先进入File菜单再选此项。.Pick(选择)将最近装入编辑窗口的8个文件列成一个表让用户选择, 选择后将该程序装入编辑区, 并将光标置在上次修改过的地方。其热健为Alt-F3。.New(新文件)说明文件是新的, 缺省文件名为NONAME.C, 存盘时可改名。.Save(存盘)将编辑区中的文件存盘, 若文件名是NONAME.C时, 将询问是否更改文件名, 其热键为F2。.Write to(存盘)可由用户给出文件名将编辑区中的文件存盘, 若该文件已存在, 则询问要不要覆盖。.Directory(目录)显示目录及目录中的文件, 并可由用户选择。.Change dir(改变目录)显示当前目录, 用户可以改变显示的目录。.Os shell(暂时退出)暂时退出Turbo C 2.0到DOS提示符下, 此时可以运行DOS 命令, 若想回到Turbo C 2.0中, 只要在DOS状态下键入EXIT即可。.Quit(退出)退出Turbo C 2.0, 返回到DOS操作系统中, 其热键为Alt+X。说明:以上各项可用光标键移动色棒进行选择, 回车则执行。也可用每一项的第一个大写字母直接选择。若要退到主菜单或从它的下一级菜单列表框退回均可用Esc键,Turbo C 2.0所有菜单均采用这种方法进行操作, 以下不再说明。二、Edit(编辑)菜单按Alt+E可进入编辑菜单, 若再回车, 则光标出现在编辑窗口, 此时用户可以进行文本编辑。编辑方法基本与wordstar相同, 可用F1键获得有关编辑方法的帮助信息。与编辑有关的功能键如下:F1 获得Turbo C 2.0编辑命令的帮助信息F5 扩大编辑窗口到整个屏幕F6 在编辑窗口与信息窗口之间进行切换F10 从编辑窗口转到主菜单编辑命令简介:PageUp 向前翻页PageDn 向后翻页Home 将光标移到所在行的开始End 将光标移到所在行的结尾Ctrl+Y 删除光标所在的一行Ctrl+T 删除光标所在处的一个词Ctrl+KB 设置块开始Ctrl+KK 设置块结尾Ctrl+KV 块移动Ctrl+KC 块拷贝Ctrl+KY 块删除Ctrl+KR 读文件Ctrl+KW 存文件Ctrl+KP 块文件打印Ctrl+F1 如果光标所在处为Turbo C 2.0库函数, 则获得有关该函数的帮助信息Ctrl+Q[ 查找Turbo C 2.0双界符的后匹配符Ctrl+Q] 查找Turbo C 2.0双界符的前匹配符说明:1. Turbo C 2.0的双界符包括以下几种符号:花括符 {和}尖括符 &和&圆括符 (和)方括符 [和]注释符 /*和*/双引号单引号 '2. Turbo C 2.0在编辑文件时还有一种功能, 就是能够自动缩进, 即光标定位和上一个非空字符对齐。在编辑窗口中, Ctrl+OL为自动缩进开关的控制键。三、Run(运行)菜单按Alt+R可进入Run菜单, 该菜单有以下各项:.Run(运行程序)运行由Project/Project name项指定的文件名或当前编辑区的文件。如果对上次编译后的源代码未做过修改, 则直接运行到下一个断点(没有断点则运行到结束)。否则先进行编译、连接后才运行, 其热键为Ctrl+F9。.Program reset(程序重启)中止当前的调试, 释放分给程序的空间, 其热键为Ctrl+F2。.Go to cursor(运行到光标处)调试程序时使用, 选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句, 否则提示错误。其热键为F4。.Trace into(跟踪进入)在执行一条调用其它用户定义的子函数时, 若用Trace into项, 则执行长条将跟踪到该子函数内部去执行, 其热键为F7。.Step over(单步执行)执行当前函数的下一条语句, 即使用户函数调用, 执行长条也不会跟踪进函数内部, 其热键为F8。.User screen(用户屏幕)显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。四、Compile(编译)菜单按Alt+C可进入Compile菜单, 该菜单有以下几个内容:.Compile to OBJ(编译生成目标码)将一个C源文件编译生成.OBJ目标文件, 同时显示生成的文件名。其热键为Alt+F9。.Make EXE file(生成执行文件)此命令生成一个.EXE的文件, 并显示生成的.EXE文件名。其中.EXE文件名是下面几项之一。1. 由Project/Project name说明的项目文件名。2. 若没有项目文件名, 则由Primary C file说明的源文件。3. 若以上两项都没有文件名, 则为当前窗口的文件名。.Link EXE file(连接生成执行文件)把当前.OBJ文件及库文件连接在一起生成.EXE文件。.Build all(建立所有文件)重新编译项目里的所有文件, 并进行装配生成.EXE文件。该命令不作过时检查(上面的几条命令要作过时检查, 即如果目前项目里源文件的日期和时间与目标文件相同或更早, 则拒绝对源文件进行编译)。.Primary C file(主C文件)当在该项中指定了主文件后, 在以后的编译中, 如没有项目文件名则编译此项中规定的主C文件, 如果编译中有错误, 则将此文件调入编辑窗口, 不管目前窗口中是不是主C文件。.Get info(获得有关当前路径、源文件名、源文件字节大小、编译中的错误数目、可用空间等信息。五、Project(项目)菜单按Alt+P可进入Project菜单, 该菜单包括以下内容:.Project name(项目名)项目名具有.PRJ的扩展名, 其中包括将要编译、连接的文件名。例如有一个程序由file1.c, file2.c, file3.c组成, 要将这3个文件编译装配成一个file.exe的执行文件, 可以先建立一个file.prj的项目文件, 其内容如下:file1.cfile2.cfile3.c此时将file.prj放入Project name项中, 以后进行编译时将自动对项目文件中规定的三个源文件分别进行编译。然后连接成file.exe文件。如果其中有些文件已经编译成.OBJ文件, 而又没有修改过, 可直接写上.OBJ扩展名。此时将不再编译而只进行连接。例如: file1.objfile2.cfile3.c将不对file1.c进行编译, 而直接连接。说明:当项目文件中的每个文件无扩展名时, 均按源文件对待, 另外, 其中的文件也可以是库文件, 但必须写上扩展名.LIB。.Break make on(中止编译)由用户选择是否在有Warining(警告)、Errors(错误)、Fatal Errors( 致命错误)时或Link(连接)之前退出Make编译。.Auto dependencies(自动依赖)当开关置为on, 编译时将检查源文件与对应的.OBJ文件日期和时间, 否则不进行检查。.Clear project(清除项目文件)清除Project/Project name中的项目文件名。.Remove messages(删除信息)把错误信息从信息窗口中清除掉。六、Options(选择菜单)按Alt+O可进入Options菜单, 该菜单对初学者来说要谨慎使用。.Compiler(编译器)本项选择又有许多子菜单, 可以让用户选择硬件配置、存储模型、调试技术、代码优化、对话信息控制和宏定义。这些子菜单如下:Model共有Tiny, small, medium, compact, large, huge 六种不同模式可由同户选择。Define打开一个宏定义框, 同户可输入宏定义。多重定义可同分号, 赋值可用等号。Code generation它又有许多任选项, 这些任选项告诉编译器产生什么样的目标代码。Calling convention 可选择C或Pascal方式传递参数。Instruction set 可选择或指令系列。Floating point 可选择仿真浮点、数学协处理器浮点或无浮点运算。Default char type 规定char的类型。Alignonent 规定地址对准原则。Merge duplicate strings 作优化用, 将重复的字符串合并在一起。Standard stack frame 产生一个标准的栈结构。Test stack overflow 产生一段程序运行时检测堆栈溢出的代码。Line number 在.OBJ文件中放进行号以供调试时用。OBJ debug information 在.OBJ文件中产生调试信息。OptimizationOptimize for 选择是对程序小型化还是对程序速度进行优化处理。Use register variable 用来选择是否允许使用寄存器变量。Register optimization 尽可能使用寄存器变量以减少过多的取数操作。Jump optimization   通过去除多余的跳转和调整循环与开关语句的办法, 压缩代码。SourceIndentifier length 说明标识符有效字符的个数, 默认为32个。Nested comments 是否允许嵌套注释。ANSI keywords only   是只允许ANSI关键字还是也允许Turbo C2.0关键字ErrorError stop after 多少个错误时停止编译, 默认为25个。Warning stop after   多少个警告错误时停止编译, 默认为100个。Display warningPortability warning 移植性警告错误。ANSI Violations 侵犯了ANSI关键字的警告错误。Common error    常见的警告错误。Less common error 少见的警告错误。Names 用于改变段(segment)、 组( group) 和类(class)的名字, 默认值为CODE,DATA,BSS。.Linker(连接器)本菜单设置有关连接的选择项, 它有以下内容:Map file menu 选择是否产生.MAP文件。Initialize segments   是否在连接时初始化没有初始化的段。Devault libraries 是否在连接其它编译程序产生的目标文件时去寻找其缺省库。Graphics library 是否连接graphics库中的函数。Warn duplicate symbols 当有重复符号时产生警告信息。Stack warinig 是否让连接程序产生No stack的警告信息。Case-sensitive link 是否区分大、小写字。.Environment(环境)本菜单规定是否对某些文件自动存盘及制表键和屏幕大小的设置Message trackingCurrent file 跟踪在编辑窗口中的文件错误。All files 跟踪所有文件错误。Off 不跟踪。Keep message 编译前是否清除Message窗口中的信息。Config auto save 选on时, 在Run, Shell或退出集成开发环境之前,如果Turbo C 2.0的配置被改过, 则所做的改动将存入配置文件中。选off时不存。Edit auto save 是否在Run或Shell之前, 自动存储编辑的源文件。Backup file 是否在源文件存盘时产生后备文件(.BAK文件)。Tab size 设置制表键大小, 默认为8。Zoomed windows 将现行活动窗口放大到整个屏幕, 其热键为F5。Screen size 设置屏幕文本大小。.Directories(路径)规定编译、连接所需文件的路径, 有下列各项:Include directories 包含文件的路径, 多个子目录用;分开。Library directories 库文件路径, 多个子目录用;分开。Output directoried 输出文件(.OBJ, .EXE, .MAP文件)的目录。Turbo C directoried Turbo C 所在的目录。Pick file name 定义加载的pick文件名, 如不定义则从currentpick file中取。.Arguments(命令行参数)允许用户使用命令行参数。.Save options(存储配置)保存所有选择的编译、连接、调试和项目到配置文件中, 缺省的配置文件为TCCONFIG.TC。.Retrive options装入一个配置文件到TC中, TC将使用该文件的选择项。七、Debug(调试)菜单按Alt+D可选择Debug菜单, 该菜单主要用于查错, 它包括以下内容:EvaluateExpression 要计算结果的表达式。Result 显示表达式的计算结果。New value 赋给新值。Call stack 该项不可接触。而在Turbo C debuger 时用于检查堆栈情况。Find function 在运行Turbo C debugger时用于显示规定的函数。Refresh display 如果编辑窗口偶然被用户窗口重写了可用此恢复编辑窗口的内容。八、Break/watch(断点及监视表达式)按Alt+B可进入Break/watch菜单, 该菜单有以下内容:Add watch 向监视窗口插入一监视表达式。Delete watch 从监视窗口中删除当前的监视表达式。Edit watch 在监视窗口中编辑一个监视表达式。Remove all watches 从监视窗口中删除所有的监视表达式。Toggle breakpoint 对光标所在的行设置或清除断点。Clear all breakpoints 清除所有断点。View next breakpoint 将光标移动到下一个断点处。
上一个文章:
下一个文章:
网站版权与免责声明
①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
??????????????????
此栏目下没有推荐文章
| 【】【】【】【】【】 |
| 【】【】

我要回帖

更多关于 三星120g固态硬盘价格 的文章

 

随机推荐