코드의 규범화 - 고품질 프로그램의 구조(一)

20268 단어 코드
PS: 선배의 경험과 자신의 개성화된 소감을 정리한다.
1. 프로그램은 사람을 보게 하는 것이다. 동료나 지도자, 심지어 낯선 사람에게 교류를 공유하고 대학 시절의 전원 대회를 기억한다. 원장님은"코드를 쓰는 것은 붓글씨를 쓰는 것과 마찬가지로 서예의 규칙이 있어야 하고 미적 감각이 있어야 한다. 이것도 과반인지 비과반인지 구분하는 출신이다. 도대체 이 사람이 평소에 엄밀한지 부주의한지, 이 사람이 미에 대한 추구가 있는지, 실제 팀의 경험이 있는지를 고찰하는 지점이다."
2. 학교에서 이런 이야기를 하는 경우가 드물기 때문에 스스로 정리하고 주의할 수밖에 없다.
1. 프로그램 전체 구조 조판
1. 스페이스 바 분할 프로그램의 서로 다른 논리 블록이나 코드 블록, 예를 들어 클래스의 성명 이후
1 class A

2 {

3 

4 };

5 // 

함수 정의 이후
void print()

{



}

// 

같은 클래스 or 함수 체내에서 논리 블록 or 기능은 빈칸으로 구분되어야 한다
if (xxx)

{

    xxx;

    // 

    for ()

    {

        xxx;

    }

    // 

    xxx;

}

else

{

    xx;

}

// 

2. 코드를 한 줄로 만들고 한 가지 일만 한다.
//int a, b, c;//   

//a = b = c;

//a = b + 1; a = a + b;



//  ,    ,    

int a;//a

int b;//b

int c;//c



a = b + c;

a = b - c;

3. 모든 순환체, 판단체 등 집행문구는{}
if ()

  xxxx;//      ,       



//  

if ()

{
}
//

4、순환하는 for,while,do,스위치 switch,판단문구if 등 한 줄을 독점하지 마라
//while(){xx;};//   



//  

while ()

{

}

5. 변수의 정의를 초기화하는 좋은 습관을 기르고 (가능한 한 빨리) 소홀해서 잊어버리는 것을 방지한다. 예를 들어 프로그램이 매우 크고 앞에 있는 변수가 초기화되지 않으면 뒤에 잊어버리면 사용이 잘못된다!
c++는 임의로 사용할 수 있고, 현재 표준 C99 이후의 C도 이렇게 할 수 있습니다.
6. 키워드 뒤에 공백을 남긴다(키워드를 강조하고 식별한다)
if ()

{

}



//constint a = 10;

const int a = 10;

7. 함수 이름 뒤에 ()가 키워드와 다르다
//void print ();

void print();

8. 목록의 분호(예를 들어 for 순환 등), 목록의 쉼표(예를 들어 함수 매개 변수 목록 등)는 모두 빈칸을 분리하고 한데 모이지 마라
부치, 비교, 위치 이동, 산수, 논리 등 이원 연산자, 앞뒤에 빈칸을 넣어 분리하지만, 예를 들어 원점. ->[] 연산자 앞뒤에 공백 없이 비교 및 전달 관계가 있는
//for (int i=0;i<100;i++)//          

for (int i = 0; i < 100 || i > 0; i++)//++    ,        ,       

{

}



//int x=a<b?a:b;//    

int x = a < b ? a : b;



/*     

int * p = & a;

p -> function();

(*p) . function();*/

int *p = &a;

p->function();

(*p).function();



//int arr [100];//

int arr[100];

9. 프로그램은 왼쪽으로 정렬해야 한다. 괄호 등 표시를 포함하고 만약에 끼워 넣으면 들여쓰기를 사용해야 한다!
/*   java,       ,         ,       ,c c++       

if (){

    xxxx;

}*/



if ()

{//     

}



do 

{

} while ();//   while     !    ,       while ();



//

if ()

{

if ()

{

if ()

{

xxxx;

}

}

}

10. 임예 박사의 책을 보면 한 줄의 코드는 70-80자 정도의 문자를 유지하는 것을 권장한다. 너무 길면 보기 어렵고 인쇄하기도 쉽지 않다. 길면 분할해야 하고 분할한 새 줄은 적당히 축소해야 하며 조판이 가지런해야 한다.
/*          !

if ((long_long_long_long < very_big_high) || (a > b) && (short_short) <= 100000)

{

//

}*/

//     ,        ,             !          ,     for  () 

if ((long_long_long_long < very_big_high) 

     || (a > b) 

     && (short_short) <= 100000)

{

    //

}



//        

//void sum(int long_variable, int so_long_variable);

virtual int sum(int long_variable, 

                int so_long_variable);

11.*와 & 도대체 누구(데이터 유형 or 변수)에 접근해야 하는지에 대한 질문을 많이 찾았는데 변수 이름을 따라가야 한다고 생각합니다!
//int* a;//        int   ,     

//int* a, b;//  a b    ,            !      b    !



int *x, y;

char *name;

 
2. 주석과 판권, 헤더 파일과 정의 파일의 구조는 일반적인 상황에서 클래스, 함수, 상수의 성명을 헤더 파일에 쓰고 정의를 쓴다.c or cpp 파일
헤더 파일: 1. 프로그램은 헤더 파일을 통해 표준 라이브러리의 기능을 호출한다. 왜냐하면 때때로 원본 코드가 발표하기 불편하기 때문이다(절대 다수). 그러면 헤더 파일과 이진 라이브러리만 제공하면 된다. 사용자 호출 인터페이스 성명은 이런 기능을 사용할 수 있다. 구체적인 실현을 보지 않고 관심을 가지지 않아도 컴파일러가 자동으로 추출을 찾을 수 있다.2. 헤더 파일은 프로그램이 양호한 차원성과 구조성을 갖추고 읽기성을 향상시키며 유형 검사를 강화할 수 있습니다!3. 자바와 유사하다. 만약에 소프트웨어의 헤더 파일이 매우 많다면 (예를 들어 자바의dao,action,servlet 등과 유사) 디렉터리로 나누어 저장할 수 있고 유지보수에 편리하다.예를 들어 헤더 파일은include 디렉터리에 저장하고, 정의 파일은source 디렉터리에 저장합니다.만약 어떤 헤더 파일도 비밀을 지켜야 한다면 정의 파일과 함께 놓을 수 있습니다!
 
헤더 파일과 정의 파일의 첫머리에 저작권 정보와 저자 정보, 파일 기능 소개 등(팀 또는 회사의 요구에 따라)
/*

*    Copyright (c) 2014, xxxxxxxx

*    All rights reserved

*    

*        :

*        :

*

*        :

*          :

*        :

*    

*    //         ,          ,    ,  

*/

헤드 파일 구조
1. 저작권, 파일 정보 설명 2, 사전 처리 작업 3, 상수, 클래스, 함수, 구조, 연합, 매거 등의 성명 4. 헤더 파일이 중복 인용되는 것을 방지하기 위해 #ifndef#define...#endif 구조로 사전 처리 블록 5, 헤더 파일은 성명만 저장하고 어떤 정의도 쓰지 않습니다!6, c++의 클래스 내 구성원 함수, 만약 성명과 동시에 정의, 자동 inline, 효율이든 스타일이든 보장할 수 없습니다!추천하지 않습니다.7. 상수는 대문자로 표시한다!변수 구분
//       myHeader.h

#ifndef MYHEADER_H //           

#define MYHEADER_H //              ,    ?     ,            ,    #endif。   ,      

//  

#include <iostream>

#include <string>

#include "zijdingyi.h"//

const double PI = 3.141592653;//            ,c      #define PI 3.14

……



//  

void function();//       

……



//  

class A

{

    //   

};

//  

#endif //        

파일 구조 정의
1. 저작권 정보와 작성자의 프로그램 정보 등 처음부터 작성해야 한다. 2. 헤더 파일 인용 3. 정의 코드
//         implementation.cpp

#include "myHeader.h"



//   

void function()

{

    //……

}



//          

void A::print()

{

    //……

}

 
c와 c++의 주석은 단행 주석//표준 c 새 블록 주석/**/
주석은 일반적으로 다음과 같이 사용한다. 1. 함수 인터페이스 성명의 의미 해석 2. 헤더 파일과 정의 파일, 판권, 저자, 기능 등 정보 설명 3. 개인이 중요하게 생각하는 코드 줄, 블록의 제시 정보 4. 주석은 학습을 위해 사용할 경우 필기(개인적으로) 사용할 수 있다. 만약에 정식 소프트웨어 제품이라면 너무 많으면 안 된다!
int arr[NUM];//                 ,         !

손님을 위주로 해서는 안 되고, 또한 디자인도 적고, 깔끔해야 한다.
5. 코드가 수정되면 상응하는 주석은 반드시 제때에 업데이트해야 합니다!6. 주석은 책임을 져야 한다. 함부로 쓰거나 당연하다고 생각해서는 안 된다. 애매모호해서는 안 된다. 똑똑히 쓰고 똑똑히 써야 한다. 줄임말을 사용하지 않아야 한다.그렇지 않으면 다른 사람을 오도하거나 나중에 자신이 봐도 알아볼 수 없도록 쓰지 않는 것이 낫다. 또는 나중에 자신이 이런 주석을 보면 자신의 지식을 잘못 배웠는지 의심할 수도 있다. 7. 주석의 위치가 마음대로 되지 않는다!해석된 코드와 가까워지려면 코드의 위쪽이나 뒤쪽이 모두 (아래는 안 돼) 8. 코드에 많은 플러그인이 있으면 플러그인의 끝에 주석을 달아서 읽기에 편리하고 일목요연하다!
if ()

{

    //……



    while ()

    {

        //……



        for ()

        {

            //……

        }//end of for



        //……

    }//end of while



    //……

}//end of if

……

13. 유형의 구조판식
class A

{

private://    , private          ,      public       ,           。           

    int a;

public:
xxxxx; };

 
3. 변수의 명명 습관은 헝가리법이나 낙타봉 명명법(구체적으로 팀의 규정에 복종해야 한다)을 추천한다. 헝가리법: 변수나 함수명에 접두사를 넣어 사용자에게 어떻게 이해하는지 알려준다.이름이 까다롭지만 직관적이고 읽기 쉽다 (마이크로소프트 추천)
char *chName;//     ch  ,      。

int iNum;//int i

float fVar;//float f

낙타봉 명명법: 변수명이나 편지명은 한 글자 또는 여러 글자가 연결되어 유일한 식별자를 구성하면 첫 번째 단어는 소문자로 하고 뒤에 있는 모든 단어의 자모는 대문자로 쓴다
String myFirstName;

String myLastName;//                    

몇 가지 공통성 문제
1. 변수 이름과 함수 이름, 클래스 이름 등은 의미가 있어야 합니다.가장 좋은 것은 영어 단어(확실히 영어가 중요하고 여기에 나타나는 것이 아니라는 것을 알 수 있다)의 조합이다. 중국어 병음을 사용할 수 없다!!!!2. 현재의 표준 C는 변수 이름의 길이를 구체적으로 규정하지 않지만 길수록 좋은 것은 아니다. (예를 들어 OC, 애플은 방법 이름이 길수록 좋은 것을 원하기 때문이다) 일반적으로 국부 변수는 짧은 것을 사용하는데 가장 좋은 것은 단일 문자이다. 예를 들어 i, j, k, p, q 등이다. 3. 서로 다른 스타일의 명칭 규칙을 한 프로그램에 사용하지 말고 낙타봉을 사용하거나 헝가리를 사용하거나 다른 4,대소문자에 의존해서 변수를 구분하지 마라. (비록 그들은 다르지만)
int sum(int x, int X);//x X     

double SUM(double x, double y);//       

5. 전역 변수와 국부 변수에 대해 이름을 바꿀 수 있지만 피하는 것이 좋다
6. 변수명에 대해 명사, 또는 형용사+명사를 사용해야 한다.
double preCode;

double nextCode;

int oldNum;

int newNum;

char *redCar;

char *blueCar;

7. 전역 함수의 이름은 동사 or동사 +명을 사용하고 클래스 구성원 함수명은 동사만 사용하며 클래스의 대상은 명사의 역할을 충당해야 한다.
Point point;

point.draw();//     

drawPoint();//    

8. 서로 배척하는 의미가 있는 경우 반의어로 명명한다
int minValue;

int maxValue;

void setAge(int age);

int getAge();

9、어떤 명칭이든지 숫자를 섞어서는 안 된다!
int a1;//   ,       ,         ,        

int a2;//

10. 상수명은 대문자로 하고 밑줄로 분할한다
const int MAX_NUM;

#define MIN_VALUE 10;

11. 정적 변수 성명 사용 접두사 s
static int s_minValue;//s_    static

12. 글로벌 변수 이전에 접두사 g 사용
double g_money;//g_     global

13. 클래스의 데이터 구성원 앞에서 접두사 m 사용
void Point::setAge(int age)

{

    m_age = age;//m_      member                       or    

}

좋은 웹페이지 즐겨찾기