확장명이없는 C ++ 헤더 파일을 사용하는 것이 좋은 방법입니까?


9

나는 C ++ 지침에 따라 동료와 논쟁을하고있다.

그는 현재 모든 라이브러리를 다음과 같이 디자인했습니다.

  • 그는 파일 이름에 일관되지 않은 대문자와 소문자를 사용합니다
  • 그의 헤더 중 일부에는 확장명이 없습니다

확장명이 없으면 C ++ 표준 파일 용으로 예약되어 있으며 대문자를 사용하면 오류가 발생하기 쉽다고 생각합니다 (특히 Windows와 Linux 모두에서 작동하는 코드를 처리 할 때).

그의 요점은 Qt컨벤션 (Qt를 사용하지 않는 코드의 경우에도)을 따르고 "Qt가 그렇게한다면 나쁘지 않을 것"이라고 계속 말합니다.

이제 나는 열린 마음을 유지하려고 노력하지만, 그의 도서관에서 일할 때 정말 기분이 좋지 않습니다. 이것에 관한 공통의 규칙 세트가 있습니까? 표준이 그것에 대해 뭔가 말하고 있습니까?

대단히 감사합니다.


3
#define signal…… ... ( "Qt가 그렇게하면 나쁘지 않습니다.")-나는 모든 디자인 선택에 개인적으로 동의한다고 말할 수는 없습니다.
저스틴

@Justin : 나도 마찬가지 Qt입니다. 나는 그것이 훌륭한 도서관이라고 생각하지만 그들의 디자인 선택 중 일부는 실제로 나에게 잘못 느낀다.
ereOn

1
@Justin 필자는 _널리 사용되는 널리 사용되는 코드로 시작하는 매크로를 보았지만 표준과 완전히 다릅니다 .
Luchian Grigore

1
그러나 확장명이없는 헤더를 피해야하는 진정한 이유는 다음과 같습니다. 기본 IDE 및 텍스트 편집기에서 헤더를 자동으로 인식하지 못합니다. 난 그냥 *.hppC ++ 헤더에 사용하고 내 모든 도구는 "얻어".
저스틴

5
스마트 프로그래머는 그렇지 않기 때문에 Qt는이 규칙을 정확하게 사용합니다 . 이는 헤더가 새로운 Qt 헤더와 충돌하지 않음을 의미 합니다 .
MSalters

답변:


16

내가 아는 한 확장 (또는 부족)은 문제를 일으키지 않을 것입니다. 확장명을 모두 삭제하면 헤더 파일을 검색하기가 어렵고 (예 : 와일드 카드 * .h 및 * .hpp로), 파일의 내용을 식별하기가 더 어렵 기 때문에 (예 : 에디터는 확장에 의존하여 적절한 구문 강조 모드를 선택합니다).

코드 관점에서 볼 때 큰 차이는 없습니다. 케이스를 어디에서나 일관성있게 사용하고 파일을 차별화하기 위해 대소 문자 차이에만 의존하지 않는 한 케이스조차도 문제가되지 않습니다. 편의상 소문자를 고수하고 확장명 (.h 또는 .hpp)을 사용하는 것이 더 쉽습니다.

그러나 위의 사항 중 하나전체 개발 팀을 위해 하나의 규칙선택하고 준수하는 것 입니다. 무엇을 포함하고 싶을 때마다 파일의 케이스, 이름, 확장자를 찾는 방법을 찾아 보는 것이 훨씬 나쁩니다.이 모두는 사용하려는 것에 대한 지식으로 "추측 할 수 있어야"합니다.


하나의 규칙을 선택하고이를 지키는 것은 나쁜 생각이 아니지만 기존의 규칙을 개선 할 수 있다면 어떨까요? 이 경우 코스를 변경하는 것이 좋습니다.
kotlinski 2019

@kotlinski 이것은 선택하는 것이 선호의 문제이기 때문에 상황을 개선하기 위해 할 수있는 일이없는 경우 중 하나입니다. 실제로, OS (읽기, Windows)는 확장명을 기반으로 파일을 열 프로그램을 결정할 수 있기 때문에 확장명을 갖는 것이 없음보다 낫습니다.
Paul

@PaulManta : 그러나 당신은 여기 자신에 대해 논쟁하지 않습니까? 첫째, 당신은 아무것도 개선 할 방법이 없다고 말합니다. 그런 다음 확장명을 갖는 것이 좋지 않은 것보다 낫다고 말합니다. 그것은 변화가 불가능하다고 말하는 일종의 패배 주의적 태도입니다.
kotlinski

@kotlinski 일반적으로 새 코드로 변경하는 것이 가능한지, 혼합 규칙이 미치는 영향에 따라 오래된 코드의 양이 달라집니다. 이 경우 폴 만타 (Paul Manta)에 동의하지만 실제적인 이유로 대부분 개인이 선호하는 확장 프로그램입니다.
Adam Bowen

1
@kotlinski 아무것도 개선 할 방법이 없지만 상황을 악화시키는 방법이 있습니다. 이 토론은 spaces-vs-tabs 토론만큼 의미가 없습니다. 하나의 규칙을 선택하고 유용한 것을 수행하십시오.
Paul

6

표준 헤더 파일 만 확장명없이 사용할 수 있다는 규칙은 없습니다 (표준). 파일 이름은 원하는 모든 것이 될 수 있습니다. 그러나 일반적인 모범 사례는 다음을 제안합니다.

  1. 확장자가없는 파일은 없으며

  2. 다른 유형의 파일은 다른 확장자를가집니다. 특히 C ++ 헤더 는 C 컴파일러가 수용 할 수있는 헤더 .hpp와 다른 확장자 ( 또는 .hh)를 사용합니다 .

(유감스럽게도, 두 번째 규칙은 종종 위반되며, 하나는 종종 C ++ 헤더 파일을 .h.

경우와 관련하여 파일 이름은 일부 시스템에서는 대소 문자를 구분하지만 다른 시스템에서는 대소 문자를 구분하지 않으므로 각별한주의가 필요합니다. 나는 작동하는 두 가지 규칙을 보았습니다. 파일 이름의 소문자로 된 모든 파일 이름이나 C 파일 이름의 경우와 관련하여 파일 이름은 대소 문자와 정확히 동일한 규칙을 따릅니다.

두 경우 모두 합의에 따라 프로젝트 규칙을 설정하면 모든 사람이 규칙을 따릅니다.


1
나는 이것과 관련하여 제임스와 함께 있습니다. 동일한 확장자를 가진 두 가지 종류의 헤더 파일에서 도구를 적절하게 작동시키는 것은 악몽입니다.

@TomTanner 확장명이없는 파일이 있으면 더 나빠집니다. 나는 주로 유닉스 환경에서 일해 왔으며 실행 파일의 확장자가 없다는 것이 항상 실망스럽고 문제를 일으켰습니다.

6
If Qt does it that way, then it can't be bad.

예. 예, 정말 가능합니다. 그들의 라이브러리 디자인은 "우리는 너무나 자바가되고 싶어한다"입니다. 총 혼란입니다. 표준 라이브러리가 훨씬 좋습니다.

또한 근본적으로 논리적 오류입니다. Qt의 디자인은 왜 그것이 좋은지에 대한 논리적 인 주장을 할 수 있다면 에뮬레이션 할 가치가 있습니다 .Qt이기 때문에 좋지 않습니다.


경험적인 주장이다. 많은 사람들이 사용하는 큰 소프트웨어 제품입니다. 이러한 명명 규칙 선택으로 인해 심각한 문제가 발생하면 지금까지 알려지고 변경 될 것입니다. 그렇지 않으므로 너무 나쁘지 않습니다. 그렇다고해서 이것이 최상의 솔루션이라는 것을 의미하지는 않습니다.
H. Rittich

0

아시다시피 1998 표준 이후 표준 라이브러리 헤더 만 .h가 없습니다. 따라서 비표준 C ++ 헤더 파일은 일반적으로 여전히 .h로 작성됩니다. 그러나 그것은 관습이라는 것을 명심하십시오. 확장자 또는 .txt 확장명을 사용할 수 있습니다. 소문자로 시작하는 클래스를 작성하는 것과 같지만 여전히 작동하지만 관례는 아닙니다.


3
Btw "Qt가 그렇게하면 나쁘지 않습니다." 그것은 ... 정말 나쁜 인자이다

2
표준은 사용자 정의 헤더가 어떻게 이름이되어야하는지에 대해 아무 말도하지 않습니다. 표준 헤더의 이름 만 지정합니다.
Mike Seymour

0

이것들은 규칙이 아니라 규칙을 준수 할 제약이 없지만, 규칙은 u가 참조를 위해 올 때 삶을 더 쉽게 만듭니다.

확장자 (.h, .hpp)에 따라 c ++에 포함 된 파일에는 확장자가 필요하지 않습니다 .c 라이브러리 또는 부스트 라이브러리와 같이 c ++ 이외의 헤더를 사용하는 경우 확장자를 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.