已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湖南省郴州市网格员招聘考试备考试题及答案解析
- 2026年锦州市古塔区网格员招聘笔试模拟试题及答案解析
- 2025-2030年汽油行业市场营销创新战略制定与实施分析研究报告
- 新形势下卫浴瓷砖行业顺势崛起战略制定与实施分析研究报告
- 2025-2030年牙科直手机市场需求变化趋势与商业创新机遇分析研究报告
- 2026年快消承运分销代理合同
- 2026年AI维护智能硬件协议
- 2026年经济师检测卷附答案详解(轻巧夺冠)
- 2025年度电信职业技能鉴定过关检测试卷含完整答案详解
- 2026陕西神延煤炭有限责任公司招聘(17人)笔试历年参考题库附带答案详解
- 2025招商证券校园招聘笔试参考题库附带答案详解
- 缺血性肠病课件
- 幼儿园户外自主游戏中竹资源应用策略探讨
- 2007简易劳动合同标准文本
- 【物理】第九章 压强 单元练习+2024-2025学年人教版物理八年级下册
- DL∕T 5113.9-2017 水电水利基本建设工程单元工程质量等级评定标准 第9部分:土工合成材料应用工程
- 国家八年级数学质量测试题(六套)
- 招标代理服务服务方案
- 国家电网有限公司十八项电网重大反事故措施
- 绘本故事PPT课件之牙婆婆
- 《说“木叶”》一等奖创新教学设计统编版高中语文必修下册
评论
0/150
提交评论