C ++ 코드 파일 확장자? .cc 대 .cpp [닫힘]


599

C ++ 코드가 파일 .cc.cpp파일 로 모두 저장된 것을 보았습니다 . 둘 사이에 차이가 있습니까?

구글 스타일 가이드를 제안하는 것 같다 .cc,하지만 설명을 제공하지 않습니다.

나는 주로 Linux 시스템의 프로그램에 관심이 있습니다.


85
결론 중요하지 않습니다. 가능한 기원 cc = C 클래스, cpp = C 더하기 플러스
Lazer

6
clang ++에 중요합니다. .h로 끝나는 이름의 C ++ 헤더 파일을 제공하면 clang ++에서 경고합니다.
allyourcode

4
조금 신경 쓰는 또 다른 도구는 이맥스입니다. 깔끔한 .emacs 설정으로 .h 파일을 열면 (emacs 용어에서 "찾기") c ++ 모드가 아닌 c 모드가 활성화됩니다. 물론, emacs가 다른 것을하도록 emacs를 구성 할 수 있지만, 요점은 c-mode가 기본 설정이라는 것입니다.
allyourcode

3
lint걱정하고, .CC ++이고 또는 .c.cc어느 것도 이해하지 못하는 C입니다 .cpp. 최소한 AIX 6.1에서.
Jesse Chisholm

5
"무관하다"라고 대답하는 것은 실제로 도움이되지 않습니다. 질문은 전적으로 관련이 있습니다. OP는 충실한 협약을 찾고있었습니다. 더 좋은 대답은 "안타깝게도 C ++ 커뮤니티에는 이에 대한 확실한 규칙이 없습니다"입니다. 생각하면 슬프다. 다른 모든 인기있는 언어는 하나의 고유 한 파일 확장자를 가진 것으로 보입니다. gcc와 같이 중요한 프로젝트가 사용하는 것을 고수합니다. 그들은을 사용.cc 합니다.
Lucio Paiva

답변:


703

C ++ 컴파일러는 어느 형식 으로든 파일을 처리 할 수 ​​있기 때문에 하루가 끝나도 상관 없습니다. 팀 내에서 실제 문제라면 동전을 뒤집어 실제 작업으로 이동하십시오.


89
글쎄, 그것은 유효한 포인트이지만 사용자의 질문에 대답하지 않습니다.
vikrantt

319
CC는 입력 빠르다

50
이것이 왜 대답입니까? 새로운 프로그래머는 그것이 중요하지 않다는 것을 알지 못하고 직접적인 대답을받을 자격이 있습니다.
Robben_Ford_Fan_boy

14
답은 호기심이 많고 마음이 편한 프로그래머에게는 충분하지 않습니다. 더 자세한 설명이 있기 때문에이 페이지 의 답변을 더 많이 원합니다 .
Novin Shahroudi

2
컴파일러가 일반적으로 관련된 유일한 도구가 아니라고 생각할 때 (거의 항상, "make"또는 유사한 규칙이 빌드 규칙 일치를 위해 사용하는 확장명을 신경 쓰게 될 것입니다.)이 답변은 실제로 핵심을 다루지 않습니다. 질문의 우려. 결정에 영향을 줄 수있는 시스템 및 툴체인 (좋아하는 메이크 규칙 등 포함)에 따라 변형이 있습니다. 예를 들어, QNX 6 시리즈 개발 플랫폼 중 일부인 기본 재귀 다중 타겟 빌드 시스템은 * .cpp 파일을 C ++ 언어 소스로 선택하지 않습니다. 그것은 원한다 .cc
JoGusto

296

GNU GCC는 C ++ 파일로 다음을 모두 인식하고 GCC를 통해있는 invoke C ++ 컴파일 여부에 관계없이 당신의 사용 또는 g ++ : .C, .cc, .cpp, .CPP, .c++, .cp, 또는 .cxx.

노트 .C- 경우를 GCC에 문제를, .c반면 C 파일입니다 .C(컴파일러 그것은 즉 컴파일 결정할 수 있도록 경우) C ++ 파일입니다.

GCC는 또한 특수 처리를 나타내는 다른 접미사를 지원합니다. 예를 들어 .ii파일은 C ++로 컴파일되지만 사전 처리되지는 않습니다 (별도의 사전 처리 된 코드 용). 인식 된 모든 접미사는 gcc.gnu.org에 자세히 나와 있습니다.


5
"GCC에서 대소 문자"-대소 문자를 구분하지 않으므로 Windows는 어떻습니까?
Devesh Khandelwal

17
@Devesh : Windows도 마찬가지입니다. 그러나 OS는 폴더에 두 개의 파일이 대소 문자별로 구별되는 것을 방지합니다.
Clifford

23
@DeveshKhandelwal 그러나 그것은 케이스 보존입니다
Yatharth Agarwal

229

사용할 확장명을 결정하면서 비 컴파일러 도구를 고려하여 makefile 및 기타 도구에 사용할 유용한 조언은 자신에게 맞는 답변을 찾는 데 도움이되는 훌륭한 방법입니다.

난 그냥 몇 가지 도움말에 다음을 추가하고 싶었 .cc.cpp내가 발견 한 정보. 다음은 "C ++ Primer Plus"책에서 다른 환경으로 분류 된 확장입니다.

유닉스 사용 : .C, .cc, .cxx,.c

GNU C ++ 사용 : .C, .cc, .cxx, .cpp,.c++

디지털 화성 용도 : .cpp,.cxx

볼랜드 C ++는 다음을 사용합니다. .cpp

Watcom은 다음을 사용합니다. .cpp

의 Microsoft Visual C ++ 사용 : .cpp, .cxx,.cc

메트로 웍스의 CodeWarrior의 사용 : .cpp, .cp, .cc, .cxx,.c++

다른 환경은 다른 확장을 지원합니다. 나도이 질문에 대답 하고이 게시물을 찾았습니다. 이 게시물을 바탕으로 내가 갈 거라고 생각 .hpp하고 .cpp크로스 플랫폼 / 크로스 도구 인식의 용이성을 위해.


5
이 답변은 실제로 제시된 질문을 해결하려는 다른 사람들보다 가장 가깝습니다. 다른 언어들도 있지만 파일 확장자에 관한 한 C ++에는 부족합니다.
Lucio Paiva

6
어떤 의미에서 유닉스는 사용하지 .cpp않습니까?
Keith Thompson

vc ++ 6.0은 .cc 파일을 지원하지 않습니다.
xus

사용자 user의 @KeithThompson cehck 답변 181548
Spyros Mourelatos

@SpyrosMourelatos 예. 그러나 유닉스 계열 시스템의 C ++ 코드 .cpp가 C ++ 소스 파일에 매우 일반적으로 사용되는 경우입니다. 인용 된 답변에 따르면 "cpp"는 C 전 처리기의 약어입니다.
Keith Thompson

79

.cpp내가 아는 한 C ++의 권장 확장입니다. 일부 사람들 .hpp은 C와 구별하기 위해 C ++ 헤더 사용 을 권장하기도합니다 .

컴파일러는 당신이하는 일에 신경 쓰지 않지만 개인적인 취향입니다.


60
나는 C ++ 헤더에 .h 사용에서 .hpp 사용으로 전환하기로 결정했다. 주로 편집기와 같은 다른 도구도 알아야합니다. gcc와 함께 사전 컴파일 된 헤더를 사용할 때 사전 컴파일 할 때 '-x c ++-header'옵션을 사용하지 않으면 기본적으로 .h 파일에는 C, .hpp 파일에는 C ++를 사용합니다. .h 파일.
jdkoftinoff

5
@jd. 동의했다. h / c 파일이 hpp / cpp 파일로 바뀌면 자동화 된 도구를 훨씬 쉽게 사용할 수 있습니다.
Paul Nathan

4
g ++는 .hpp를 C ++ 헤더 (헤더 사전 컴파일 용)로 인식하지 않지만 .hh는 인식합니다. 이 때문에 나는 실제로 아무런 차이가 없으므로 .cpp / .hpp보다 .cc / .hh를 사용했습니다.
Tronic


3
@CharlesAddis-예, 같은 디렉토리에 "abcd.H"(c ++ 인터페이스) 및 "abcd.h"(C 인터페이스)가있는 많은 코드를 "abcd.hpp"및 "abcd.h로 변환해야했습니다. "중복 파일 이름"으로 인해 "svn co"또는 Windows 상자 또는 Mac OS X 상자 (기본 파일 시스템 사용)에 압축을 풀기 만하면 실패합니다.
jdkoftinoff

37

개인적 .cc으로 구현 파일, .hh헤더 및 .inl인라인 / 템플릿에 확장을 사용 합니다 .

앞서 말했듯이, 그것은 주로 맛의 문제입니다.

내가 본 바로는 , .cc더 "것 같다 오픈 소스 프로젝트가 중심 이있는 반면, 스타일을 코딩 훌륭한 오픈 소스 소프트웨어에 좋습니다으로". cpp더 창 같은 것 같습니다.

--- 편집하다

언급했듯이, 이것은 "내가 본 것" 에서 잘못된 것일 수 있습니다. 내가 작업 한 모든 Windows 프로젝트가 사용 .cpp되었고 많은 오픈 소스 프로젝트 (주로 유닉스 계열)가 사용되었습니다 .cc.

다음을 사용하는 코딩 스타일 예 .cc:


1
이것에 대한 언급이 있습니까? 나는 OSS .cc 대 Windows .cpp를 본 적이 없다
bobby

6
Visual Studio는 C ++ 용 .cpp 파일을 만듭니다. 나는 그 뒤에 역사를 모른다.
Natan Yellin 2016 년

7
LLVM 코딩 표준은 .cpp / .h를 옹호 -*- C++ -*-하고 헤더 에 태그를 넣는 것 같습니다 . llvm.org/docs/CodingStandards.html ; 모질라 코딩 스타일은 .cpp / .h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/… ; KDE는 .H도 / .CPP을 사용하는 것으로 보인다 quickgit.kde.org
sastanin

19

사용되는 다른 파일 확장자는 .cxx.C(대문자 C)입니다. 나는 Bjarne Stroustrup이 .C원래 사용되었다고 생각 합니다. .cppC 전 처리기의 이름이므로 C ++에도 사용되었습니다.


13

다른 옵션은 .cxx이 곳 x플러스 45 ° 회전 될 예정이다.

Windows, Mac 및 Linux는 모두 지원 .c++되므로이를 사용해야합니다.


12

여러 사람 .cc이 아무 말도 하지 않는다고 말하는가 ? 그것은 수도. C ++는 인생을 "C with Classes"로 시작했습니다.

진정한 것을 .cc.cpp대부분의 유닉스 시스템 (C 컴파일러와 C 프리 프로세서 각각)에 명령 이름도 있습니다.

나는 .cpp독점적으로 사용 하지만 Windows에서 시작했습니다. .cc더 많은 유닉스 관습이지만, 거기에서도 점점 더 적습니다. GNU make에는 기본 규칙이 .cpp있으므로 아마도 Windows와 다른 모든 것에서 기본적으로 작동합니다. 반면에 현대 C ++은 헤더에 전혀 확장을 사용하지 않으므로 실제로는 마음에 들지 않습니다. 내 모든 프로젝트 .h는 헤더 파일에 사용 하며 가능한 한 많은 extern "C"테스트 및 테스트 를 통해 C 및 C ++를 모두 지원합니다 __cplusplus.


2
.cwc해서는 안됩니까? :)
Joshua

많은 컴파일러가 네임 스페이스를 지원하기 전에 표준 헤더에 .h 확장자를 사용했습니다. 일반적으로 컴파일러는 더 이상 사용되지 않는 .h 버전을 제공하여 라이브러리를 전역 네임 스페이스에 배치합니다. 이를 통해 레거시 코드를 지원할 수 있습니다. 나는 그들이 .h 확장자를 갖지 않는 이유는 표준이 파일이 아니라 본질적으로 '내장'될 수 있기 때문에 어딘가를 읽었습니다. 그러나 그것은 외경일지도 모른다.
Clifford

11

프로젝트 / 팀에서 사용하는 규칙을 따르십시오.


11

나는 개인적으로 내가 한 .cc프로젝트에서 본 적이 없지만 모든 기술에서 컴파일러는 신경 쓰지 않을 것입니다.

누가 관심을 가질 것인가는 개발자가 소스를 다루는 것이므로 팀원이 편한 것을 따라야합니다. "팀"이 오픈 소스 커뮤니티 인 경우 가장 일반적인 .cpp것으로 이동하십시오.이 중 가장 좋아 하는 것 같습니다.


github.com/google/googletest 와 같은 몇몇 잘 알려진 프로젝트 는 .ccC ++ 구현 파일에 대한 파일 확장자로 사용 됩니다
Vertexwahn

10

대부분의 스타일 규칙과 마찬가지로 중요한 것은 두 가지뿐입니다.

  1. 가능한 한 사용하는 곳에서 일관성을 유지하십시오.
  2. 사용중인 특정 선택에 의존하는 것을 설계하지 마십시오.

그것들은 모순되는 것처럼 보이지만 각자 고유 한 이유로 가치가 있습니다.


8

.C그리고 .cc내가 본 (몇) 유닉스 지향 C ++ 프로그램에 대한 표준이 될 것으로 보인다. 나는 항상 .cppWindows에서 일하기 때문에 항상 나 자신을 사용해 왔으며 그 이후로 영원히 표준이되었습니다.

개인적으로 추천합니다 .cpp. 왜냐하면 "C Plus Plus"의 약자입니다. 이 파일 확장명이 약어는 것이 매우 중요 물론이지만,이 근거는 설득력있는 다른 중요한 일들이 시프트 키의 비 사용하다 (배제 충분히 증명해야 .C하고 .c++어떤이 배제 곳 (수)과 정규 표현식 메타 문자의 회피 .c++- 불행히도 .물론 물론 피할 수는 없습니다 .).

이것은 배제 .cc하지 않으므로 실제로 아무것도 의미하지는 않지만 Linux 지향 코드에는 좋은 선택 일 것입니다.


2
그러나 "cpp"는 "C 전 처리기"를 나타낼 수도 있습니다. 사실, 시스템의 "cpp"프로그램은 아마도 C 프리 프로세서 일 것입니다.
Jesper

8

소스와 헤더에 각각 .C와 .h를 사용했습니다. 선택의 좋은 점은 명령 행 *.[Ch]에서 모든 코드 파일을 쉽게 선택할 수 있다는 것입니다. 사용 .C대소 문자 구분 파일 시스템에 문제가 될 수 있지만,이 경우 foo.cfoo.C같은 디렉토리에, 당신이 바라는 당신은 어쨌든 무엇을 얻을 :


8

.cc 확장자는 makefile 내에서 암시 적 규칙을 사용하는 데 필요합니다. 이 링크를 통해 makefile을 더 잘 이해하지만 .cc 확장자의 유용성을 명확하게 나타내는 두 번째 링크를 주로 살펴보십시오.

ftp://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_2.html

https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html

나는 지금 이것에 대해 배웠다.


다시 그들은 단지 .cpp파일입니다. 걱정 마 ! :-)
Tom Taylor

1
".C"대신 C ++ 소스 파일에 접미사 '.cc'를 사용하는 것이 좋습니다. " 나는 그것이 단지 나쁜 표현이라고 생각합니다. .C대소 문자를 구분하지 않는 파일 시스템이있는 시스템에서는 사용에 문제가있을 수 있습니다. 예를 들어 over make를 사용할 때 특별한 이점이 있다고 생각하지 않습니다 . Makefile 은 C ++ 소스 파일에 적합합니다. .cc.cpp.cpp
Keith Thompson

7

어떤 확장을 사용할지는 중요하지 않습니다. 더 마음에 드는 것을 골라 내십시오. 이 명명 규칙을 알고있는 유일한 예외 WinDDK는 파일 WDK을 컴파일 할 수 없다는 것입니다 (또는 지금입니까?) .cc. 리눅스에서는 거의 문제가되지 않습니다.


6

새 C ++ 프로젝트를 시작하고 최신 C ++ 스타일을 찾기 시작했습니다. 나는 파일 이름 지정과 관련하여 여기에서 끝났고 나는 내가 선택한 것을 생각해 낼 것이라고 생각했다. 간다 :

Stroustrup은 이것을 기술적 인 문제보다 비즈니스 고려 사항으로 간주 합니다.

그의 조언에 따라 툴체인이 기대하는 것을 확인합시다.

UNIX / Linux의 경우 .cpp 및 .C 규칙은 별명이므로 다음 기본 GNU make 규칙을 .cc 파일 이름 접미사를 선호하는 것으로 해석 할 수 있습니다.

$ make -p | egrep COMPILE[^=]+=
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.cpp = $(COMPILE.cc)
COMPILE.C = $(COMPILE.cc)

(참고 : 기본 COMPILE.cxx 별칭은 없습니다)

따라서 UNIX / Linux를 대상으로하는 경우 .cc와 .cpp가 모두 좋은 옵션입니다.

Windows를 대상으로 할 때 파일 시스템은 대소 문자를 구분하지 않으므로 .C에 문제가 있습니다. Visual Studio는 .cpp 접미사를 선호 한다는 점에 유의해야합니다.

macOS를 타겟팅 할 때 Xcode는 .cpp / .hpp를 선호합니다 (Xcode 10.1에서만 확인). .h를 사용하도록 항상 헤더 템플릿을 변경할 수 있습니다.

가치있는 것에 대해, 원하는 코드 기반을 기반으로 결정을 내릴 수도 있습니다. Google은 .cc를 사용 하고 LLVM libc ++는 .cpp를 사용합니다.

헤더 파일은 어떻습니까? 이들은 C 또는 C ++ 파일의 컨텍스트에서 컴파일되므로 .h와 .hpp를 구분할 컴파일러 또는 빌드 시스템이 없습니다. 편집기 / IDE의 구문 강조 표시 및 자동 들여 쓰기는 문제가 될 수 있지만 모든 .h 파일을 C ++ 모드에 연결하면 수정됩니다. 예를 들어 Linux의 emacs 구성은 모든 .h 파일을 C ++ 모드로로드하고 C 헤더를 잘 편집합니다. 그 외에도 C와 C ++를 혼합 할 때이 조언을 따를 수 있습니다 .

내 개인적인 결론 : .cpp / .h 는 가장 저항이 적은 경로입니다.


3

다른 사람들이 내 앞에서 쓴 것처럼 결국에는 프로젝트 / 팀 / 회사에서 사용하는 내용이 끝납니다.

개인적으로, 나는 cc확장을 사용하지 않고, 명확한 가치가 없다면 (내 의견으로는) 확장 수를 줄이고 확장 하지 않으려 고합니다.

그 가치가 무엇인지, 이것은 내가 사용하는 것입니다 .

c -순수 C 코드 만, 메소드가있는 클래스 또는 구조체 없음

cpp -C ++ 코드

hpp-헤더 만 코드. 구현은 헤더에 있습니다 (예 : 템플릿 클래스).

h-C / C ++ 용 헤더 파일. 나는 또 다른 구별이 가능하다는 데 동의하지만, 내가 쓴 것처럼 단순화를 위해 확장 수를 줄이려고합니다. 적어도 내가 일한 C ++ 프로젝트에서 hpure-C 파일은 더 드물기 때문에 다른 확장자를 추가하고 싶지 않았습니다.

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