外文翻译 -C语言_第1页
外文翻译 -C语言_第2页
外文翻译 -C语言_第3页
外文翻译 -C语言_第4页
外文翻译 -C语言_第5页
已阅读5页,还剩16页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0外文原文TheCProgrammingLanguagePrefaceThecomputingworldhasundergonearevolutionsincethepublicationofTheCProgrammingLanguagein1978.Bigcomputersaremuchbigger,andpersonalcomputershavecapabilitiesthatrivalmainframesofadecadeago.Duringthistime,Chaschangedtoo,althoughonlymodestly,andithasspreadfarbeyonditsoriginsasthelanguageoftheUNIXoperatingsystem.ThegrowingpopularityofC,thechangesinthelanguageovertheyears,andthecreationofcompilersbygroupsnotinvolvedinitsdesign,combinedtodemonstrateaneedforamorepreciseandmorecontemporarydefinitionofthelanguagethanthefirsteditionofthisbookprovided.In1983,theAmericanNationalStandardsInstitute(ANSI)establishedacommitteewhosegoalwastoproduceanunambiguousandmachine-independentdefinitionofthelanguageC,whilestillretainingitsspirit.TheresultistheANSIstandardforC.Thestandardformalizesconstructionsthatwerehintedbutnotdescribedinthefirstedition,particularlystructureassignmentandenumerations.Itprovidesanewformoffunctiondeclarationthatpermitscross-checkingofdefinitionwithuse.Itspecifiesastandardlibrary,withanextensivesetoffunctionsforperforminginputandoutput,memorymanagement,stringmanipulation,andsimilartasks.Itmakesprecisethebehavioroffeaturesthatwerenotspelledoutintheoriginaldefinition,andatthesametimestatesexplicitlywhichaspectsofthelanguageremainmachine-dependent.ThisSecondEditionofTheCProgrammingLanguagedescribesCasdefinedbytheANSIstandard.Althoughwehavenotedtheplaceswherethelanguagehasevolved,wehavechosentowriteexclusivelyinthenewform.Forthemostpart,thismakesnosignificantdifference;themostvisiblechangeisthenewformoffunctiondeclarationanddefinition.Moderncompilersalreadysupportmostfeaturesofthestandard.Wehavetriedtoretainthebrevityofthefirstedition.Cisnotabiglanguage,anditisnotwellservedbyabigbook.Wehaveimprovedtheexpositionofcriticalfeatures,suchaspointers,thatarecentraltoCprogramming.Wehaverefinedtheoriginalexamples,andhaveaddednewexamplesinseveralchapters.Forinstance,thetreatmentofcomplicateddeclarationsisaugmentedbyprogramsthatconvertdeclarationsintowordsandviceversa.Asbefore,allexampleshavebeentesteddirectlyfromthetext,whichisinmachine-readableform.1AppendixA,thereferencemanual,isnotthestandard,butourattempttoconveytheessentialsofthestandardinasmallerspace.Itismeantforeasycomprehensionbyprogrammers,butnotasadefinitionforcompilerwriters-thatroleproperlybelongstothestandarditself.AppendixBisasummaryofthefacilitiesofthestandardlibrary.Ittooismeantforreferencebyprogrammers,notimplementers.AppendixCisaconcisesummaryofthechangesfromtheoriginalversion.Aswesaidintheprefacetothefirstedition,Cwearswellasonesexperiencewithitgrows.Withadecademoreexperience,westillfeelthatway.WehopethatthisbookwillhelpyoulearnCanduseitwell.Wearedeeplyindebtedtofriendswhohelpedustoproducethissecondedition.JonBently,DougGwyn,DougMcIlroy,PeterNelson,andRobPikegaveusperceptivecommentsonalmosteverypageofdraftmanuscripts.WearegratefulforcarefulreadingbyAlAho,DennisAllison,JoeCampbell,G.R.Emlin,KarenFortgang,AllenHolub,AndrewHume,DaveKristol,JohnLinderman,DaveProsser,GeneSpafford,andChrisvanWyk.WealsoreceivedhelpfulsuggestionsfromBillCheswick,MarkKernighan,AndyKoenig,RobinLake,TomLondon,JimReeds,ClovisTondo,andPeterWeinberger.DaveProsseransweredmanydetailedquestionsabouttheANSIstandard.WeusedBjarneStroustrupsC+translatorextensivelyforlocaltestingofourprograms,andDaveKristolprovideduswithanANSICcompilerforfinaltesting.RichDrechslerhelpedgreatlywithtypesetting.Oursincerethankstoall.BrianW.KernighanDennisM.RitchiePrefacetothefirsteditionCisageneral-purposeprogramminglanguagewithfeatureseconomyofexpression,modernflowcontrolanddatastructures,andarichsetofoperators.Cisnotaveryhighlevellanguage,norabigone,andisnotspecializedtoanyparticularareaofapplication.Butitsabsenceofrestrictionsanditsgeneralitymakeitmoreconvenientandeffectiveformanytasksthansupposedlymorepowerfullanguages.CwasoriginallydesignedforandimplementedontheUNIXoperatingsystemontheDECPDP-11,byDennisRitchie.Theoperatingsystem,theCcompiler,andessentiallyallUNIXapplicationsprograms(includingallofthesoftwareusedtopreparethisbook)arewritteninC.Productioncompilersalsoexistforseveralothermachines,includingtheIBMSystem/370,theHoneywell6000,andtheInterdata8/32.Cisnottiedtoanyparticular2hardwareorsystem,however,anditiseasytowriteprogramsthatwillrunwithoutchangeonanymachinethatsupportsC.ThisbookismeanttohelpthereaderlearnhowtoprograminC.Itcontainsatutorialintroductiontogetnewusersstartedassoonaspossible,separatechaptersoneachmajorfeature,andareferencemanual.Mostofthetreatmentisbasedonreading,writingandrevisingexamples,ratherthanonmerestatementsofrules.Forthemostpart,theexamplesarecomplete,realprogramsratherthanisolatedfragments.Allexampleshavebeentesteddirectlyfromthetext,whichisinmachine-readableform.Besidesshowinghowtomakeeffectiveuseofthelanguage,wehavealsotriedwherepossibletoillustrateusefulalgorithmsandprinciplesofgoodstyleandsounddesign.Thebookisnotanintroductoryprogrammingmanual;itassumessomefamiliaritywithbasicprogrammingconceptslikevariables,assignmentstatements,loops,andfunctions.Nonetheless,anoviceprogrammershouldbeabletoreadalongandpickupthelanguage,althoughaccesstomoreknowledgeablecolleaguewillhelp.Inourexperience,Chasproventobeapleasant,expressiveandversatilelanguageforawidevarietyofprograms.Itiseasytolearn,anditwearswellasonsexperiencewithitgrows.Wehopethatthisbookwillhelpyoutouseitwell.Thethoughtfulcriticismsandsuggestionsofmanyfriendsandcolleagueshaveaddedgreatlytothisbookandtoourpleasureinwritingit.Inparticular,MikeBianchi,JimBlue,StuFeldman,DougMcIlroyBillRoome,BobRosinandLarryRoslerallreadmultiplevolumeswithcare.WearealsoindebtedtoAlAho,SteveBourne,DanDvorak,ChuckHaley,DebbieHaley,MarionHarris,RickHolt,SteveJohnson,JohnMashey,BobMitze,RalphMuha,PeterNelson,ElliotPinson,BillPlauger,JerrySpivack,KenThompson,andPeterWeinbergerforhelpfulcommentsatvariousstages,andtoMileLeskandJoeOssannaforinvaluableassistancewithtypesetting.IntroductionCisageneral-purposeprogramminglanguage.IthasbeencloselyassociatedwiththeUNIXoperatingsystemwhereitwasdeveloped,sinceboththesystemandmostoftheprogramsthatrunonitarewritteninC.Thelanguage,however,isnottiedtoanyoneoperatingsystemormachine;andalthoughithasbeencalledasystemprogramminglanguagebecauseitisusefulforwritingcompilersandoperatingsystems,ithasbeenusedequallywelltowritemajorprogramsinmanydifferentdomains.3ManyoftheimportantideasofCstemfromthelanguageBCPL,developedbyMartinRichards.TheinfluenceofBCPLonCproceededindirectlythroughthelanguageB,whichwaswrittenbyKenThompsonin1970forthefirstUNIXsystemontheDECPDP-7.BCPLandBaretypelesslanguages.Bycontrast,Cprovidesavarietyofdatatypes.Thefundamentaltypesarecharacters,andintegersandfloatingpointnumbersofseveralsizes.Inaddition,thereisahierarchyofderiveddatatypescreatedwithpointers,arrays,structuresandunions.Expressionsareformedfromoperatorsandoperands;anyexpression,includinganassignmentorafunctioncall,canbeastatement.Pointersprovideformachine-independentaddressarithmetic.Cprovidesthefundamentalcontrol-flowconstructionsrequiredforwell-structuredprograms:statementgrouping,decisionmaking(if-else),selectingoneofasetofpossiblevalues(switch),loopingwiththeterminationtestatthetop(while,for)oratthebottom(do),andearlyloopexit(break).Functionsmayreturnvaluesofbasictypes,structures,unions,orpointers.Anyfunctionmaybecalledrecursively.Localvariablesaretypicallyautomatic,orcreatedanewwitheachinvocation.Functiondefinitionsmaynotbenestedbutvariablesmaybedeclaredinablock-structuredfashion.ThefunctionsofaCprogrammayexistinseparatesourcefilesthatarecompiledseparately.Variablesmaybeinternaltoafunction,externalbutknownonlywithinasinglesourcefile,orvisibletotheentireprogram.Apreprocessingstepperformsmacrosubstitutiononprogramtext,inclusionofothersourcefiles,andconditionalcompilation.Cisarelativelylow-levellanguage.Thischaracterizationisnotpejorative;itsimplymeansthatCdealswiththesamesortofobjectsthatmostcomputersdo,namelycharacters,numbers,andaddresses.Thesemaybecombinedandmovedaboutwiththearithmeticandlogicaloperatorsimplementedbyrealmachines.Cprovidesnooperationstodealdirectlywithcompositeobjectssuchascharacterstrings,sets,listsorarrays.Therearenooperationsthatmanipulateanentirearrayorstring,althoughstructuresmaybecopiedasaunit.Thelanguagedoesnotdefineanystorageallocationfacilityotherthanstaticdefinitionandthestackdisciplineprovidedbythelocalvariablesoffunctions;thereisnoheaporgarbagecollection.Finally,Citselfprovidesnoinput/outputfacilities;therearenoREADorWRITEstatements,andnobuilt-infileaccessmethods.Allofthesehigher-levelmechanismsmustbeprovidedbyexplicitlycalledfunctions.MostCimplementationshaveincludedareasonablystandardcollectionofsuchfunctions.4Similarly,Coffersonlystraightforward,single-threadcontrolflow:tests,loops,grouping,andsubprograms,butnotmultiprogramming,paralleloperations,synchronization,orcoroutines.Althoughtheabsenceofsomeofthesefeaturesmayseemlikeagravedeficiency,(YoumeanIhavetocallafunctiontocomparetwocharacterstrings?),keepingthelanguagedowntomodestsizehasrealbenefits.SinceCisrelativelysmall,itcanbedescribedinsmallspace,andlearnedquickly.Aprogrammercanreasonablyexpecttoknowandunderstandandindeedregularlyusetheentirelanguage.Formanyyears,thedefinitionofCwasthereferencemanualinthefirsteditionofTheCProgrammingLanguage.In1983,theAmericanNationalStandardsInstitute(ANSI)establishedacommitteetoprovideamodern,comprehensivedefinitionofC.Theresultingdefinition,theANSIstandard,orANSIC,wascompletedinlate1988.Mostofthefeaturesofthestandardarealreadysupportedbymoderncompilers.Thestandardisbasedontheoriginalreferencemanual.Thelanguageisrelativelylittlechanged;oneofthegoalsofthestandardwastomakesurethatmostexistingprogramswouldremainvalid,or,failingthat,thatcompilerscouldproducewarningsofnewbehavior.Formostprogrammers,themostimportantchangeisthenewsyntaxfordeclaringanddefiningfunctions.Afunctiondeclarationcannowincludeadescriptionoftheargumentsofthefunction;thedefinitionsyntaxchangestomatch.Thisextrainformationmakesitmucheasierforcompilerstodetecterrorscausedbymismatchedarguments;inourexperience,itisaveryusefuladditiontothelanguage.Thereareothersmall-scalelanguagechanges.Structureassignmentandenumerations,whichhadbeenwidelyavailable,arenowofficiallypartofthelanguage.Floating-pointcomputationsmaynowbedoneinsingleprecision.Thepropertiesofarithmetic,especiallyforunsignedtypes,areclarified.Thepreprocessorismoreelaborate.Mostofthesechangeswillhaveonlyminoreffectsonmostprogrammers.AsecondsignificantcontributionofthestandardisthedefinitionofalibrarytoaccompanyC.Itspecifiesfunctionsforaccessingtheoperatingsystem(forinstance,toreadandwritefiles),formattedinputandoutput,memoryallocation,stringmanipulation,andthelike.Acollectionofstandardheadersprovidesuniformaccesstodeclarationsoffunctionsindatatypes.Programsthatusethislibrarytointeractwithahostsystemareassuredofcompatiblebehavior.MostofthelibraryiscloselymodeledonthestandardI/OlibraryoftheUNIXsystem.Thislibrarywasdescribedinthefirstedition,andhasbeenwidelyusedonothersystemsaswell.Again,mostprogrammerswillnotseemuchchange.5BecausethedatatypesandcontrolstructuresprovidedbyCaresupporteddirectlybymostcomputers,therun-timelibraryrequiredtoimplementself-containedprogramsistiny.Thestandardlibraryfunctionsareonlycalledexplicitly,sotheycanbeavoidediftheyarenotneeded.MostcanbewritteninC,andexceptfortheoperatingsystemdetailstheyconceal,arethemselvesportable.AlthoughCmatchesthecapabilitiesofmanycomputers,itisindependentofanyparticularmachinearchitecture.Withalittlecareitiseasytowriteportableprograms,thatis,programsthatcanberunwithoutchangeonavarietyofhardware.Thestandardmakesportabilityissuesexplicit,andprescribesasetofconstantsthatcharacterizethemachineonwhichtheprogramisrun.Cisnotastrongly-typedlanguage,butasithasevolved,itstype-checkinghasbeenstrengthened.TheoriginaldefinitionofCfrownedon,butpermitted,theinterchangeofpointersandintegers;thishaslongsincebeeneliminated,andthestandardnowrequirestheproperdeclarationsandexplicitconversionsthathadalreadybeenenforcedbygoodcompilers.Thenewfunctiondeclarationsareanotherstepinthisdirection.Compilerswillwarnofmosttypeerrors,andthereisnoautomaticconversionofincompatibledatatypes.Nevertheless,Cretainsthebasicphilosophythatprogrammersknowwhattheyaredoing;itonlyrequiresthattheystatetheirintentionsexplicitly.C,likeanyotherlanguage,hasitsblemishes.Someoftheoperatorshavethewrongprecedence;somepartsofthesyntaxcouldbebetter.Nonetheless,Chasproventobenanextremelyeffectiveandexpressivelanguageforawidevarietyofprogrammingapplications.Thebookisorganizedasfollows.Chapter1isatutorialonthecentralpartofC.Thepurposeistogetthereaderstartedasquicklyaspossible,sincewebelievestronglythatthewaytolearnanewlanguageistowriteprogramsinit.Thetutorialdoesassumeaworkingknowledgeofthebasicelementsofprogramming;thereisnoexplanationofcomputers,ofcompilation,norofthemeaningofanexpressionliken=n+1.Althoughwehavetriedwherepossibletoshowusefulprogrammingtechniques,thebookisnotintendedtobeareferenceworkondatastructuresandalgorithms;whenforcedtomakeachoice,wehaveconcentratedonthelanguage.Chapters2through6discussvariousaspectsofCinmoredetail,andrathermoreformally,thandoesChapter1,althoughtheemphasisisstillonexamplesofcompleteprograms,ratherthanisolatedfragments.Chapter2dealswiththebasicdatatypes,operatorsandexpressions.Chapter3threatscontrolflow:if-else,switch,while,for,etc.Chapter4coversfunctionsandprogramstructure-externalvariables,scoperules,multiplesourcefiles,andsoon-andalsotouchesonthepreprocessor.Chapter5discussespointersandaddressarithmetic.Chapter6coversstructuresandunions.6Chapter7describesthestandardlibrary,whichprovidesacommoninterfacetotheoperatingsystem.ThislibraryisdefinedbytheANSIstandardandismeanttobesupportedonallmachinesthatsupportC,soprogramsthatuseitforinput,output,andotheroperatingsystemaccesscanbemovedfromonesystemtoanotherwithoutchange.Chapter8describesaninterfacebetweenCprogramsandtheUNIXoperatingsystem,concentratingoninput/output,thefilesystem,andstorageallocation.AlthoughsomeofthischapterisspecifictoUNIXsystems,programmerswhouseothersystemsshouldstillfindusefulmaterialhere,includingsomeinsightintohowoneversionofthestandardlibraryisimplemented,andsuggestionsonportability.AppendixAcontainsalanguagereferencemanual.TheofficialstatementofthesyntaxandsemanticsoftheClanguageistheANSIstandarditself.Thatdocument,however,isintendedforemostforcompilerwriters.Thereferencemanualhereconveysthedefinitionofthelanguagemoreconciselyandwithoutthesamelegalisticstyle.AppendixBisasummaryofthestandardlibrary,againforusersratherthanimplementers.AppendixCisashortsummaryofchangesfromtheoriginallanguage.Incasesofdoubt,however,thestandardandonesowncompilerremainthefinalauthoritiesonthelanguage.Chapter1-ATutorialIntroductionLetusbeginwithaquickintroductioninC.Ouraimistoshowtheessentialelementsofthelanguageinrealprograms,butwithoutgettingboggeddownindetails,rules,andexceptions.Atthispoint,wearenottryingtobecompleteorevenprecise(savethattheexamplesaremeanttobecorrect).Wewanttogetyouasquicklyaspossibletothepointwhereyoucanwriteusefulprograms,andtodothatwehavetoconcentrateonthebasics:variablesandconstants,arithmetic,controlflow,functions,andtherudimentsofinputandoutput.WeareintentionallyleavingoutofthischapterfeaturesofCthatareimportantforwritingbiggerprograms.Theseincludepointers,structures,mostofCsrichsetofoperators,severalcontrol-flowstatements,andthestandardlibrary.Thisapproachanditsdrawbacks.Mostnotableisthatthecompletestoryonanyparticularfeatureisnotfoundhere,andthetutorial,bybeingbrief,mayalsobemisleading.AndbecausetheexamplesdonotusethefullpowerofC,theyarenotasconciseandelegantastheymightbe.Wehavetriedtominimizetheseeffects,butbewarned.Anotherdrawbackisthatlaterchapterswillnecessarilyrepeatsomeofthischapter.Wehopethattherepetitionwillhelpyoumorethanitannoys.Inanycase,experiencedprogrammersshouldbeabletoextrapolatefromthematerialinthischaptertotheirownprogrammingneeds.Beginnersshouldsupplementitbywritingsmall,similarprogramsoftheirown.BothgroupscanuseitasaframeworkonwhichtohangthemoredetaileddescriptionsthatbegininChapter2.7GettingStartedTheonlywaytolearnanewprogramminglanguageisbywritingprogramsinit.Thefirstprogramtowriteisthesameforalllanguages:Printthewordshello,worldThisisabighurdle;toleapoverityouhavetobeabletocreatetheprogramtextsomewhere,compileitsuccessfully,loadit,runit,andfindoutwhereyouroutputwent.Withthesemechanicaldetailsmastered,everythingelseiscomparativelyeasy.InC,theprogramtoprinthello,worldis#includemain()printf(hello,worldn);Justhowtorunthisprogramdependsonthesystemyouareusing.Asaspecificexample,ontheUNIXoperatingsystemyoumustcreatetheprograminafilewhosenameendsin.c,suchashello.c,thencompileitwiththecommandcchello.cIfyouhaventbotchedanything,suchasomittingacharacterormisspellingsomething,thecompilationwillproceedsilently,andmakeanexecutablefilecalleda.out.Ifyouruna.outbytypingthecommanda.outitwillprinthello,worldOnothersystems,theruleswillbedifferent;checkwithalocalexpert.Now,forsomeexplanationsabouttheprogramitself.ACprogram,whateveritssize,consistsoffunctionsandvariables.Afunctioncontainsstatementsthatspecifythecomputingoperationstobedone,andvariablesstorevaluesusedduringthecomputation.CfunctionsarelikethesubroutinesandfunctionsinFortranortheproceduresandfunctionsofPascal.Ourexampleisafunctionnamedmain.Normallyyouareatlibertytogivefunctionswhatevernamesyoulike,butmainisspecial-yourprogrambeginsexecutingatthebeginningofmain.Thismeansthateveryprogrammusthaveamainsomewhere.mainwillusuallycallotherfunctionstohelpperformitsjob,somethatyouwrote,andothersfromlibrariesthatareprovidedforyou.Thefirstlineoftheprogram,8#includetellsthecompilertoincludeinformationaboutthestandardinput/outputlibrary;thelineappearsatthebeginningofmanyCsourcefiles.ThestandardlibraryisdescribedinChapter7andAppendixB.Onemethodofcommunicatingdatabetweenfunctionsisforthecallingfunctiontoprovidealistofvalues,calledarguments,tothefunctionitcalls.Theparenthesesafterthefunctionnamesurroundth

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论