C/C++編程規範

來源:互聯網
上載者:User
GENERAL-------Use real tabs that equal 4 spaces.Use typically trailing braces everywhere (if, else, functions, structures, typedefs, class definitions, etc.)if ( x ) {}The else statement starts on the same line as the last closing brace.if ( x ) {} else {}Pad parenthesized expressions with spacesif ( x ) {}Instead of if (x) {}Andx = ( y * 0.5f );Instead ofx = (y * 0.5f);Use precision specification for floating point values unless there is an explicit need for a double.float f = 0.5f;Instead offloat f = 0.5;Andfloat f = 1.0f;Instead offloat f = 1.f;Function names start with an upper case:void Function( void );In multi-word function names each word starts with an upper case:void ThisFunctionDoesSomething( void );The standard header for functions is:/*====================FunctionName  Description====================*/Variable names start with a lower case character.float x;In multi-word variable names the first word starts with a lower case character and each successive word starts with an upper case.float maxDistanceFromPlane;Typedef names use the same naming convention as variables, however they always end with "_t".typedef int fileHandle_t;Struct names use the same naming convention as variables, however they always end with "_t".struct renderEntity_t;Enum names use the same naming convention as variables, however they always end with  "_t". The enum constants use all upper case characters. Multiple words are separated with an underscore.enum contact_t {CONTACT_NONE,CONTACT_EDGE,CONTACT_MODELVERTEX,CONTACT_TRMVERTEX};Names of recursive functions end with "_r"void WalkBSP_r( int node );Defined names use all upper case characters. Multiple words are separated with an underscore.#define SIDE_FRONT 0Use ‘const’ as much as possible.Use:const int *p; // pointer to const intint * const p; // const pointer to intconst int * const p;// const pointer to const intDon’t use:int const *p;CLASSES-------The standard header for a class is:/*===============================================================================Description===============================================================================*/Class names start with "id" and each successive word starts with an upper case.class idVec3;Class variables have the same naming convention as variables.class idVec3 {float x;float y;float z;}Class methods have the same naming convention as functions.class idVec3 {float Length( void ) const;}Indent the names of class variables and class methods to make nice columns. The variable type or method return type is in the first column and the variable name or method name is in the second column.class idVec3 {float x;float y;float z;float Length( void ) const;const float *ToFloatPtr( void ) const;}The * of the pointer is in the first column because it improves readability when considered part of the type.Ording of class variables and methods should be as follows:1. list of friend classes2. public variables3. public methods4. protected variables5. protected methods6. private variables7. private methodsThis allows the public interface to be easily found at the beginning of the class.Always make class methods ‘const’ when they do not modify any class variables.Avoid use of ‘const_cast’.  When object is needed to be modified, but only const versions are accessible, create a function that clearly gives an editable version of the object.  This keeps the control of the ‘const-ness’ in the hands of the object and not the user.Return ‘const’ objects unless the general usage of the object is to change its state.  For example, media objects like idDecls should be const to a majority of the code, while idEntity objects tend to have their state modified by a variety of systems, and so are ok to leavenon-const.Function overloading should be avoided in most cases.  For example, instead of:const idAnim *GetAnim( int index ) const;const idAnim *GetAnim( const char *name ) const;const idAnim *GetAnim( float randomDiversity ) const;Use:const idAnim *GetAnimByIndex( int index ) const;const idAnim *GetAnimByName( const char *name ) const;const idAnim *GetRandomAnim( float randomDiversity ) const;Explicitly named functions tend to be less prone to programmer error and inadvertent calls to functions due to wrong data types being passed in as arguments.  Example:Anim = GetAnim( 0 );This could be meant as a call to get a random animation, but the compiler would interpret it as a call to get one by index.Overloading functions for the sake(目的) of adding ‘const’ accessible function is allowable:class idAnimatedEntity : public idEntity {idAnimator *  GetAnimator( void );const idAnimator * GetAnimator( void ) const;};In this case, a const version of GetAnimator was provided in order to allow GetAnimator to be called from const functions.  Since idAnimatedEntity is normally a non-const object, this is allowable.  For a media type, which is normally const, operator overloading should be avoided:class idDeclMD5 : public idDecl {const idMD5Anim *GetAnim( animHandle_t handle ) const;idMD5Anim * GetEditableAnim( animHandle_t handle );};id Studio Names---------------id<name>Dlg      // dialog classid<name>Ctrl     // dialog control classid<name>Frm      // frame windowid<name>View     // view windowid<name>         // any other classFILE NAMES---------Each class should be in a seperate source file unless it makes sense to group several smaller classes.The file name should be the same as the name of the class without the "id" prefix. (Upper/lower case is preserved.)class idWinding;files:Winding.cppWinding.hWhen a class spans across multiple files these files have a name that starts with the name of the class without "id", followed by an underscore and a subsection name.class idRenderWorld;files:RenderWorld_load.cppRenderWorld_demo.cppRenderWorld_portals.cppWhen a class is a public virtual interface to a subsystem ,the public interface is implemented in a header file with the name of the class without "id". The definition of the class that implements the subsystem is placed in a header file with the name of the class without "id" and ends with "_local.h". The implementation of the subsystem is placed in a cpp file with the name of the class without "id".class idRenderWorld;RenderWorld.h // public virtual idRenderWorld interfaceRenderWorld_local.h // definition of class idRenderWorldLocalRenderWorld.cpp // implementation of idRenderWorldLocal

*出自CSDN上的一篇文章上提到的,具體那篇忘了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.