C程序设计编码规范.docx
- 文档编号:26258326
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:62
- 大小:54.24KB
C程序设计编码规范.docx
《C程序设计编码规范.docx》由会员分享,可在线阅读,更多相关《C程序设计编码规范.docx(62页珍藏版)》请在冰豆网上搜索。
C程序设计编码规范
OfficeSourceCodeStyleGuide
DaveParker,6/30/95
Abstract
ThisdocumentoutlinesageneralstyleguideforCandC++sourcecodeinOfficeDevelopment.ThemainpurposehereistolistfeaturesofC++whichwewilluseandwhichwewillavoid,alongwiththebasicrationalefordoingso.Therearealsostandardsforbasiccodingissuesforthesakeofconsistencywithinthecodeandrobustconstructs.ThisisnotacompletelistofC/C++languagefeatureswithcommentary.Rather,itmentionsonlytheissuesweconsiderimportant.KnowledgeofC++isassumed.
Contents
1.GeneralGoals
2.Classes
2.1Classvs.Struct
2.2Public,Private,andProtectedmembers
2.3DataMembers
2.4VirtualFunctions
2.5Constructors
2.6Destructors
2.7NewandDelete
2.8Operators
2.9Inheritance
2.9.1InheritanceofInterfacevs.Implementation
2.9.2Inheritancevs.Containment
2.9.3MultipleInheritance
3.OtherC++Features
3.1ConstantsandEnumerations
3.2References
3.3ConstParametersandFunctions
3.4DefaultArguments
3.5FunctionOverloading
3.6OperatorOverloading
4.CommonC/C++Issues
4.1#ifdefs
4.2GlobalVariables
4.3MacrosandInlineFunctions
4.4Optimization
4.5Warnings
4.6PrivateDataandFunctions
4.7Typedefs
4.8BasicDataTypes
4.9Pointers
4.10SwitchStatements
4.11Asserts
4.12ErrorsandExceptions
5.FormattingConventions
5.1NamingConventions
5.2FunctionPrototypes
5.3VariableDeclarations
5.4ClassDeclarations
5.5Comments
5.5.1FileHeadersandSectionSeparators
5.5.2FunctionHeaders
5.5.3In-CodeComments
5.5.4AttentionMarkers
5.6Misc.FormattingConventions
5.7SourceFileOrganization
5.7.1PublicInterfaceFiles
5.7.2PrivateInterfaceFiles
5.7.3ImplementationFiles
5.7.4BaseFilenames
6.InterfacestoDLLs
6.1CFunctionsandGlobalvariables
6.2CommonC/C++PublicHeaderFiles
6.3LightweightCOMObjectsandISimpleUnknown
7.AppendixA:
BasicHungarianReference
7.1MakingHungarianNames
7.2StandardBaseTags
7.3StandardPrefixes
7.4StandardQualifiers
1.
GeneralGoals
C++isacomplexlanguagethatprovidesmanywaystodothings,andgoing搘holehog”onallofitsfeaturescanleadtoconfusion,inefficiency,ormaintenanceproblems.AllOfficedevelopersneedtobecomeexpertsonthefeatureswewilluse,andavoidtheothersinordertoformsolidconventionswithinthegroupthatweareallcomfortablewith.OuruseofC++featureswillbefairlyconservative.We抎muchrathererronthesideofjustdealingwithC,whichwe抮eallusedto,thenscrewingupourappwithanewconceptthatnotallofusareusedto.
Underlyingthechoiceofallofthestyledecisionsareafewbasicgoals,aslistedbelow.Whenindoubtaboutaparticularissue,alwaysthinkaboutthespiritofthesegoals.Sometimesthesegoalswillconflict,ofcourse,andinthesecaseswetrytoeitherprioritizethetradeoffsoruseexperience(eitherourownorfromothergroupsthathaveusedC++extensively).
1.Simplicity.Whenindoubt,keepitsimple.Bugsarerelatedmostlytocomplexity,notcode.
2.Clarity.Thecodeshoulddowhatitlookslikeit抯doing.Otherpeopleneedtobeabletounderstandyourcode.
3.Efficiency.Speedandsizeareimportant.UsingC++doesnotimplybigandslow.ThereareplentyofperfectlyreasonablewaystomakethingsasfastorfasterthanthenormalCway.Speedandsizeoftentradeoff,andmostpeopleprobablyerronthesideofchoosingspeedtoooften.Rememberthat20%ofthecodeisresponsiblefor80%ofthetime.Inmostcases,we抮emoreconcernedaboutfittingcomfortablyinlessRAM.
4.Appropriateness.Usethelanguageconstructthatisappropriatefortheabstractionoroperationyouaretryingtodo.Donotabusethelanguage.Don抰useaconstructjustbecauseithappenstowork.Definitelydon抰useastrangeconstructtoamazeandconfuseyourfriendstotrytoshowhowsmartyouare.
5.NaturaltransitionfromCtoC++.WeallusedtobeCprogrammers.OthersthatlookatourcodearestillCprogrammers(e.g.WordandExcel).Whenpossible,avoidC++constructswhereaCprogrammer抯instinctcausesawrongassumption.
6.CatchErrorsEarly.Havingthecompilercatchanerrorisideal.Havingdebugcode(e.g.Asserts)catchitisthenextbestthing,etc.Declarethingsinsuchaswayastogivethecompilerthebestchanceatcatchingerrors.
7.Fastbuilds.Totalgeneralityandmodularitycancauselotsofinter-dependenciesbetweenfiles,whichcanhaveadramaticimpactonbuildtimes.Thisisaconstanttimesinkforeveryone.Itisoftenworthrearrangingthingsalittletomakeincrementalbuildsfaster.
8.Consistency.Thewholepointofhavingastyleguideisthatprogrammersarenevertotallyautonomous,evenwhenthegrouphasstrongcodeownership.Otherpeopleneedtoreadandunderstandyourcode.Everyonehastogivealittletohaveaconsistentstyleguide,buteveryonegainsitbackwhentheyreadordebugotherpeople抯code.
2.Classes
C++classesareanicewaytoencapsulatecodeanddataintoasingleunit,whichprovidesagoodparadigmforobject-orientedimplementationsaswellotherfeaturessuchasflexibleaccesscontrol,convenientandtype-safepolymorphism,andthepossibilityofcodereuseviainheritance.
Atthemostgeneral,classesareanextensiontothebuilt-intypingofCwhichallowsyoutodefineyourowntypesalongwiththeoperationsonthattype.Takentotheextreme,everypieceofdatainaprogramcouldbeaninstanceofaclass.However,wewillnotgonearlythisfarinOffice.Wewilluseclasseswhenthereisagoodreasonto,suchastheconceptbeingimplementedisinherentlyobject-orientedorpolymorphismisrequired.Ithasbeentheexperienceofmanypeoplethatprogramsthatuseclassesforeverythingevolveintosystemsthatarecomplexandinefficient.Althoughthismaynotbethefaultofanyparticularclass,complexclasshierarchiescanleadtoneedlesscomplexity,andoverlyabstractedconceptscaneasilyleadtoinefficiency.
Ingeneral,wewillavoidallocatingclassesonthestackandpassingclassesbyvalue,becausethisiswheretheuseofconstructorsanddestructorsgetsyouintothemosttrouble.Mostclassesshouldbeallocatedvianew,freedbydelete,andpassedbypointer.Inaddition,wewillneverdeclareaglobalvariablewhichisaninstanceofaclassthathasaconstructor,becausethiscausesabunchofCruntimestufftogetlinkedinandstufftohappenatboottimetoconstructthething,whichisabigperformancehit.Usingonlyheap-allocatedclassesimplieswe抣lprobablyuseclassesonlyforrelativelycomplexobjectsthatyouwouldnormallyhaveintheheapanyway,notsimplethingslikebasicdatatypes.Beyondthis,itisajudgmentcallwhentouseaclass.Useoneifthereisagoodreason,butnotifamorestraightforwardsolutionisjustasgood.
Summary:
Useclassestoencapsulatetheimplementationofanobject-orientedconcept.
Useclassestoimplementpolymorphism.
Avoidallocatingclassinstancesonthestackandpassingthembyvalue.Usenewanddelete,andpassthembypointer.Thisimpliesnotusingclassesforsimpledatatypes.
Neverdeclareaglobalinstanceofaclassthathasaconstructor.
Noteverythingisasclass.Usethemonlywhenyougainsomething.
2.1Classvs.Struct
InC++,astructcanalsohavememberfunctionsandoperatorsandeverythingelsethataclasscanhave.Infact,theonlydifferencebetweenaclassandastructisthatallmembersdefaulttopublicaccessinastructbutprivateaccessinaclass.However,wewillnotusethisasthedecidingpointbetweenusingaclassvs.astruct.Tomatchthenormalintuition,wewilluseaclassifandonlyiftherearememberfunctionsincluded.
Summary:
Useaclassinsteadofastructifandonlyiftherearememberfunctions.
2.2Public,Private,andProtectedmembers
Asstatedabove,structsdefaulttopublicaccessandclassesdefaulttoprivateaccess.However,wewilldependonthedefaultonlyinthecaseofstructs(whereweleaveallthedataimplicitlypublic).Foraclass,wewilldeclareallmembers(bothdataandcode)explicitlyaspublic,protected,orprivate,andgroupthemintosectionsinthatorder.Forexample:
classFoo
{
public:
Foo();
~Foo();
voidHey(intI);
voidAck();
protected:
intm_iValue;
private:
intm_iStuff;
voidLocalHelperSub();
};
Summary:
Declareallclassmembersexplicitlyaspublic,protected,orprivate,ingroupsinthatorder.
2.3DataMembers
Datamembersshouldusethenamingconventionm_namewherenameisanormalHungarianlocalvariablename.Thismakesmemberfunctionimplementationseasiertoread(noconfusionaboutmembervs.localdata),andallowstheuseofthesameHungariannamefor,e.g.,parametersandmembers.Seetheexamplebelow.
Datamembersshouldnormallynotbedeclaredpublicbecausethisusuallydefeatsthepurposeoftheclassabstraction.Toefficientlyexportadatamember,declareinlinegetandsetmemberfunctions.Thiswillgetoptimizedintothesamecodeasapublicdatamember.Forexample:
classCounter
{
public:
intCItems()const{returnm_cItems;}
voidSetCItems(intcItems){m_cItems=cItems;}
private:
intm_cItems;
};
Summary:
Datamembersusethenamingconventionm_name.
Donotdeclarepublicdatamembers.Useinlineaccessorfunctionsforperformance.
2.4VirtualFunctions
Virtualfunctionsareusedtoallowderivedclassestooverrideamethodinabaseclassbyprovidingtheirownimplementationinawaythatalwayscausesthemost-derivedversiontobecalledwheneveramethodiscalledthroughanobjectpointer,evenifthatpointerisdeclaredasapoi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 编码 规范