2010-03-02 4 views
1

곧 작은 C++ 프로젝트를 시작하고 범위에 따라 변수에 대한 명명 규칙 규칙을 정교하게 작성했습니다.범위 (클래스, 메서드, 전역 ...)에 따른 변수 명명 규칙

클래스 멤버 _prefixed_with_underscore 및 메소드 매개 변수 suffixed_with_underscore_을 만들었습니다. 글로벌 변수 (예 : 중요 할 수도 있음), 인라인 전역 함수, 코드 가독성 향상을 위해 모든 것에 대해 명명 규칙을 고안하는 것에 대해 신경증적인 반응을 보였습니다.

나는 명명 규칙, 특히 메소드 매개 변수 이름에 대한 몇 가지 의문에 답변 한 this question and its answers을 읽었습니다. 매개 변수 이름에 a_rule_like_this_이있는 것은 좋은 생각이 아닙니다.

내 질문은, 프로그래밍 할 때, 특히 매개 변수 이름을 위해 다른 "엔티티"에 대해 어떤 명명 규칙을 사용합니까? 감사.

+1

커뮤니티 위키가 있어야합니다. –

+0

"neurotic"이라는 단어로 머리에 못을 박았을 것 같습니다.그것을 과장하지 마십시오. – unwind

+0

필자는 클래스와 함수를 작게 유지하여 미친 명명 스키마가없는 것이 무엇인지 명확하게 설명합니다. –

답변

1

접두어가 붙은 '_'을 사용하는 식별자를 절대 사용하지 마십시오. 접두사가 붙은 밑줄은 컴파일러 구현자가 자신의 무의미한 목적으로 사용하도록 예약되어 있습니다. C/C++ 컴파일러 구현자가 매크로, 암시 적 로컬 변수, 네임 스페이스를 만들 수 있다는 의미는 적어도 하나의 밑줄이있는 한 의미가 있습니다.

코드가 다른 모든면에서 C++ 표준을 준수하는 경우 식별자에 접두사가 붙은 밑줄이 있으면 다른 컴파일러 또는 현재 사용중인 다른 버전의 컴파일러에서 컴파일 될 것이라는 기대가 없습니다.

+1

제한 사항은 17.4.3.1.2 [lib.global.names]에 있습니다. 사용자 코드는 '__'또는 '_X'로 시작하는 식별자를 정의 할 수 없습니다. 여기서 'X'는 대문자입니다. 사용자 코드는 전역 이름 공간에서 '_'로 시작하는 식별자를 정의 할 수 없습니다. 'x'가 소문자 인 '_x'로 시작하는 이름의 속성 이름 지정이 정확합니다. –

+1

@David : 기술적으로는 올바르지 만 접두어가 붙은 일부 이름이 모두 올바르므로 올바른 것으로 가정하는 것이 쉽습니다. 문제를 완전히 피하는 것이 더 좋습니다. – Bill

+0

나는 고쳐졌다. –

3

는 규칙을 만들었습니다 많은 사람들이있다 -

규칙

명명 C++에 대한 구글 또한 또한 프로그래밍의 방법을 제안 스타일 가이드가 있습니다.

당신은 모든 점에 동의하지 않고 프로젝트/팀/회사에서 일관성을 유지하는 것이 중요합니다.

명명 규칙은 언어마다 (OS마다 다름) C++에 대한 PHP 제안은 사용하지 마십시오. (앞의 _에서 C++에 문제가 있음) C++의 경우 가장 일반적인 규칙은 매개 변수가 일반 텍스트이지만 인스턴스 변수가 _ 또는 _로 시작하는 m_으로 시작한다는 것입니다. (이전의 경우를 선호합니다)

1

식별자 앞에 밑줄 일부 컴파일러는 비표준 목적을 위해 이들을 예약하기 때문에.

나는 Google C++ style guide의 명명 규칙을 좋아합니다.

+1

불행히도 나는 그렇지 않습니다. 나는 그들을 사용한다. 그러나 나는 그들을 좋아하지 않는다. 후행 밑줄은 다른 C++ 마크 업과 결합 될 때 매우 조급해 보이지 않습니다. 접두사가있는 밑줄은 틀림없이 훨씬 좋을 것이다. –

1

이것은 약간의 의견입니다. 그래서, 여기 내거야.

  1. 는 작은 물건을 걱정하지 마십시오
  2. 체크 아웃 (당신이하고있는) 문제에 other명의 의견
  3. 당신이 선택하는 규칙 덜 중요한, 그리고 훨씬 더 많이 당신이 그것을 적용하는 것이를 일관되게
  4. 은 여기 내 규칙의 일부는 다음과 같습니다

    class MyGizmo 
    { 
    public: 
        int DoIt(); 
    private: 
        string myString_; 
    }; 
    
    typedef vector<MyGizmo> MyGizmos; 
    
    namespace somewhere 
    { 
        MyGizmos gizmos; 
    }; 
    
    
    int MyGizmo::DoIt() 
    { 
        int retVal = 0; 
        string strCopy = myString; 
        retVal = strCopy.length(); 
        return retVal; 
    } 
    
  5. ,536,