WebKit 코드 사양

움츠러들다

  • 탭 대신 공백을 사용합니다.makefile 파일과 같은 의미 있는 파일에만 Tab이 나타나야 합니다.
  • 들여쓰기 크기는 4공백입니다.정확:
    int main()
    {
        return 0;
    }

    오류:
    int main()
    {
            return 0;
    }

  • 헤더 파일에서 이름 공간의 코드는 축소되어야 합니다.정확:
    // Document.h
    namespace WebCore {
     
        class Document {
            Document();
            ...
        };
     
    } // namespace WebCore

    오류:
    // Document.h
     
    namespace WebCore {
    class Document {
     
        Document();
     
        ...
     
    };
     
    } // namespace WebCore

  • 실행 파일에서 이름 공간의 코드를 축소해서는 안 된다.정확:
    // Document.cpp
    namespace WebCore {
    Document::Document()
    {
        ...
    }
    } // namespace WebCore

    오류:
    // Document.cpp
    namespace WebCore {
     
        Document::Document()
        {
            ...
        }
     
    } // namespace WebCore

  • case 라벨은 switch와 맞춰야 하고case 아래의 문장은 축소해야 한다.정확:
    switch (condition) {
    case fooCondition:
    case barCondition:
        i++;
        break;
    default:
        i--;
    }

    오류:
    switch (condition) {
        case fooCondition:
        case barCondition:
            i++;
            break;
        default:
            i--;
    }

  • 같은 차원의 브리 표현식이 여러 줄에 걸쳐 있을 때 브리 조작부호는 뒤에 있는 것이 아니라 줄의 첫머리에 놓아야 한다.정확:
    return attr->name() == srcAttr
        || attr->name() == lowsrcAttr
        || (attr->name() == usemapAttr && attr->value().domString()[0] != '#');

    오류:
    return attr->name() == srcAttr ||
        attr->name() == lowsrcAttr ||
        (attr->name() == usemapAttr && attr->value().domString()[0] != '#');


  • 스페이스 바

  • 일원 조작부호 앞에 빈칸을 넣지 않습니다.정확:
    i++;

    오류:
    i ++;

  • 2원과 3원 조작부호의 앞뒤에 빈칸을 넣어야 한다.정확:
    y = m * x + b;
    f(a, b);
    c = a | b;
    return condition ? 1 : 0;

    오류:
    y=m*x+b;
    f(a,b);
    c = a|b;
    return condition ? 1:0;

  • 제어문과 괄호 사이에 공백을 넣습니다.정확:
    if (condition)
        doIt();

    오류:
    if(condition)
        doIt();

  • 함수를 호출할 때 함수 이름과 원괄호 사이, 원괄호와 그 내용 사이에 빈칸을 남기지 않습니다.정확:
    f(a, b);

    오류:
    f (a, b);
    f( a, b );


  • 줄을 바꾸다

  • 문장마다 한 줄을 차지한다.정확:
    x++;
    y++;
    if (condition)
        doIt();

    오류:
    x++; y++;
    if (condition) doIt();

  • else 키워드는 앞의 괄호와 한 줄에 있어야 합니다.정확:
    if (condition) {
        ...
    } else {
        ...
    }

    오류:
    if (condition) {
        ...
    }
    else {
        ...
    }

  • 현재if문장이return문장에 의해 종료되었을 때elseif문장은 여러if문장의 형식으로 써야 한다.정확:
    if (condition) {
        ...
        return someValue;
    }
    if (condition) {
        ...
    }

    오류:
    if (condition) {
        ...
        return someValue;
    } else if (condition) {
        ...
    }


  • 대괄호

  • 줄 수 정의: 괄호마다 한 줄을 차지한다.정확:
    int main()
    {
        ...
    }

    오류:
    int main() {
        ...
    }

  • 기타 큰 괄호: 왼쪽 괄호는 앞의 문장 뒤에 놓고 오른쪽 괄호는 한 줄을 차지한다.정확:
    class MyClass {
        ...
    };
     
    namespace WebCore {
        ...
    }
     
    for (int i = 0; i < 10; i++) {
        ...
    }

    오류:
    class MyClass
    {
        ...
    };

  • 한 줄만 있는 조건 제어문은 큰 괄호를 사용하지 않습니다.정확:
    if (condition)
        doIt();

    오류:
    if (condition) {
        doIt();
    }

  • 조건 자구가 비어 있는 경우 대괄호는 생략할 수 없습니다.정확:
    for ( ; current; current = current->next) { }

    오류:
    for ( ; current; current = current->next);


  • Null, False 및 0

  • C++ 언어에서는 빈 바늘이 0으로 쓰이고 C 언어에서는 빈 바늘이 NULL로 쓰인다.Objective-C와 Objective-C++에서 nil을 사용하여 빈 Objective-C 대상을 표시합니다.
  • C와 C++의 bool 값은true와false로 작성되어야 합니다.Objective-C의 BOOL 값은 YES 및 NO로 표시됩니다.
  • 진/가짜, 공/비공 및 영/비 영을 검사하려면 등식을 사용해서는 안 된다.정확:
    if (condition)
        doIt();
     
    if (!ptr)
        return;
     
    if (!count)
        return;

    오류:
    if (condition == true)
        doIt();
     
    if (ptr == NULL)
        return;
     
    if (count == 0)
        return;

  • Objective-C에서 실례 변수는 자동으로 0으로 초기화되며, 함수에서 nil 또는 NO로 추가로 초기화되지 않습니다.

  • 명명

  • 낙타명명법(CamelCase, 단어의 대소문자에 의존하여 복합어를 맞춤법으로 쓰는 방법)을 사용한다.class,struct,protocol,namespace 이름의 첫 번째 자모 대문자;변수와 함수명의 첫 번째 단어 소문자;줄임말은 완전히 대문자로 써야 한다.정확:
    struct Data;
    size_t bufferSize;
    class HTMLDocument;

    오류:
    struct data;
    size_t buffer_size;
    class HtmlDocument;

  • 특수한 상황에서 줄임말을 더 규범화하고 이해하기 쉽도록 완전한 단어를 사용한다.정확:
    size_t characterSize;
    size_t length;
    short tabIndex; // more canonical

    오류:
    size_t charSize;
    size_t len;
    short tabulationIndex; // bizarre

  • C++ 중류의 데이터 구성원은 "m"접두사정확:
    class String {
        ...
        short m_length;
    };

    오류:
    class String {
        ...
        short length;
    };

  • Objective-C 인스턴스 변수는 ""접두사로 쓰다.정확:
    @class String
        ...
        short _length;
    @end

    오류:
    @class String
        ...
        short length;
    @end

  • 브리 변수 앞에 is나did 같은 접두사를 붙인다.정확:
    bool isValid;
    bool didSendData;

    오류:
    bool valid;
    bool sentData;

  • setter 방법은 set로 시작하고 getter 방법에서는'나체자'를 사용합니다.setter와 Getter 방법의 이름은 저장할 변수와 일치해야 합니다.정확:
    void setCount(size_t); // sets m_count
    size_t count(); // returns m_count

    오류:
    void setCount(size_t); // sets m_theCount
    size_t getCount();

  • 함수 이름에 설명적인 동사를 사용한다.정확:
    bool convertToASCII(short*, size_t);

    오류:
    bool toASCII(short*, size_t);

  • 함수의 성명에서 무의미한 매개 변수 변수를 버립니다.정확:
    void setCount(size_t);

    오류:
    void setCount(size_t count);

  • Objective-C 방법의 명칭은 Cocoa 명칭 규칙에 따라야 한다. 단어처럼 읽히고 each piece of the selector should start with a lowercase letter and use intercaps(이해하지 못했음:)
  • Enum members should user InterCaps with an initial capital letter.(알아보지도 못했는데 바로 이 InterCaps가 무슨 뜻인지 모른다).
  • 상수는 #define, 매크로는 inline 함수를 우선적으로 사용합니다.
  • #defined가 정의한 상수의 모든 자모는 대문자로 되어 있고 단어 사이는 밑줄로 구분됩니다.
  • 함수 호출이나 다른 비상량 계산으로 전개되는 매크로에 대해 명칭 방법과 함수가 일치하고 매개 변수가 있든 없든 원괄호로 끝내야 한다(예를 들어 ASSERT).이런 상황에서 매크로 대신 inline 함수를 사용하는 것이 더 좋은 방법일 수도 있으니 주의하십시오.정확:
    #define WBStopButtonTitle() /
            NSLocalizedString(@"Stop", @"Stop button title")

    오류:
    #define WB_STOP_BUTTON_TITLE /
            NSLocalizedString(@"Stop", @"Stop button title")
     
    #define WBStopButtontitle /
            NSLocalizedString(@"Stop", @"Stop button title")

  • #ifndef, #define'헤더 파일 관리자'는 파일 이름에 따라 엄격하게 명명해야 한다(대소문자도 일치해야 한다). 파일 이름의'."""로 바꿉니다.정확:
    // HTMLDocument.h
    #ifndef HTMLDocument_h
    #define HTMLDocument_h

    오류:
    // HTMLDocument.h
    #ifndef _HTML_DOCUMENT_H_
    #define _HTML_DOCUMENT_H_


  • 기타 구두점

  • C++ 클래스의 구조 함수는 모든 구성원 변수를 초기화해야 합니다.각 멤버 변수(부모 클래스)는 한 줄씩 들여쓰고, 각 줄은 콜론과 쉼표로 시작합니다.정확:
    MyClass::MyClass(Document* doc)
        : MySuperClass()
        , m_myMember(0)
        , m_doc(doc)
    {
    }
     
    MyOtherClass::MyOtherClass()
        : MySuperClass()
    {
    }

    오류:
    MyClass::MyClass(Document* doc) : MySuperClass()
    {
        m_myMember = 0;
        m_doc = doc;
    }
     
    MyOtherClass::MyOtherClass() : MySuperClass() {}

  • 비 C++ 코드의 포인터 형식 - 형식과 * 사이에는 공백이 있어야 합니다 (*가능한 한 뒤에 있는 표지부호에 가깝습니다).
  • C++ 코드의 바늘과 인용 형식 - 형식과 * 또는 & 사이에 빈칸이 없습니다.정확:
    Image* SVGStyledElement::doSomething(PaintInfo& paintInfo)
    {
        SVGStyledElement* element = static_cast(node());
        const KCDashArray& dashes = dashArray();

    오류:
    Image *SVGStyledElement::doSomething(PaintInfo &paintInfo)
    {
        SVGStyledElement *element = static_cast(node());
        const KCDashArray &dashes = dashArray();


  • #include 문

  • 모든 파일은 먼저 #include "config.h"를 선택해야 합니다.
  • "config."h"다음에 마스터 헤더 파일을 포함해야 합니다. 예를 들어, Node.cpp는 다른 헤더 파일을 포함하기 전에 Node를 포함해야 합니다.h.이것은 모든 헤더 파일의 완전성을 테스트를 거쳐 다른 어떤 헤더 파일에 의존하지 않고 컴파일할 수 있도록 보장할 것이다.
  • 기타 모든 #include 문장은 일정한 순서로 제시해야 한다(대소문자 구분, 명령행 도구나 편집기의 정렬 기능을 이용할 수 있다). 일정한 논리로 정렬하는 데 고심하지 마라.
  • 좋은 웹페이지 즐겨찾기