C ++コードファイル拡張子?.cc対.cpp [終了]


599

.cc.cppファイルの両方として保存されたC ++コードを見ました。2つの間に違いはありますか?

Googleのスタイルガイドを示唆しているようだ.ccが、何の説明を提供していません。

私は主にLinuxシステム上のプログラムに関心があります。


85
結論それは問題ではありません。可能なオリジン cc = C、クラスあり、cpp = C plus plus
Lazer

6
それはclang ++にとって重要です。.hで終わる名前のC ++ヘッダーファイルを指定すると、clang ++は警告を出します。
allyourcode 2013

4
少し気にする別のツールはemacsです。クリーンな.emacs構成では、.hファイルを開く(emacsの用語で「検索」)と、c ++モードではなくcモードがアクティブになります。もちろん、(emacsのすべてと同様に)他のことを行うようにemacsを構成することもできますが、私のポイントは、cモードがデフォルトのデフォルトであるということです。
allyourcode

3
lint心配事、.CC ++で、.cCは無理解の一切です.cc.cpp。少なくともAIX 6.1では。
Jesse Chisholm

5
「問題ではない」と答えても効果はありません。質問は完全に関連しています。OPは、堅固な慣習を求めていました。より良い答えは、「残念ながら、C ++コミュニティーにはこれに関する確実な取り決めがありません」です。考えれば悲しいです。他のすべての一般的な言語には、単一の一意のファイル拡張子があるようです。私は、gccのように、重要なプロジェクトが使用するものに固執します。彼らは使用します.cc
Lucio Paiva 2016

回答:


703

結局のところ、C ++コンパイラはどちらの形式のファイルでも処理できるため、問題ではありません。それがチーム内の実際の問題である場合は、コインを投げて、実際の作業に移ります。


89
まあ、それは妥当なポイントですが、ユーザーの質問には答えません。
vikrantt 2015年

319
ccが入力する高速です
THANG

50
なぜこれが受け入れられた答えなのですか?新しいプログラマは、それが問題ではないことを知らず、簡単な答えに値します。
Robben_Ford_Fan_boy 2016

14
その答えは、好奇心旺盛でマインドフルなプログラマーには絶対に不十分です。より詳しい説明があるので、このページの回答をもっとお願いします。
Novin Shahroudi 2017年

2
コンパイラが通常含まれる唯一のツールではないことを考えると、ほとんどの場合、「make」またはビルドルールのマッチングに使用する拡張機能を気にする同様のユーティリティがあります-この答えはコアを実際には扱いません質問の懸念。決定に影響を与えるシステムおよびツールチェーン(お気に入りのメイク規則などを含む)によってバリエーションがあることに注意してください。たとえば、QNX 6シリーズの開発プラットフォームの一部のデフォルトの再帰的マルチターゲットビルドシステムは、*。cppファイルをC ++言語ソースとして取得しません。それは.ccを望んでいます
JoGusto

296

GNU GCCは、C ++ファイルとして以下の全てを認識し、関係なく、あなたがgccの通過またはg ++、それを呼び出すかどうかのC ++のコンパイルを使用します:.C.cc.cpp.CPP.c++.cp、または.cxx

.CGCCでは大文字と小文字が区別されることに注意してください。.cこれ.CはCファイルですが、C ++ファイルです(コンパイラーにコンパイル内容を決定させる場合)。

GCCは、特別な処理を示す他のサフィックスもサポートし.iiます。たとえば、ファイルはC ++としてコンパイルされますが、前処理されません(個別に前処理されたコードを対象としています)。認識されているすべてのサフィックスは、gcc.gnu.orgで詳しく説明されています


5
「GCCでの大文字と小文字の区別」-Windowsはどうですか(大文字と小文字を区別しないため)。
Devesh Khandelwal

17
@Devesh:Windowsも。ただし、OSでは、大文字と小文字のみで区別されるフォルダー内に2つのファイルが存在することはできません。
クリフォード

23
@DeveshKhandelwalしかし、大文字と小文字は区別され
ません

229

makefileやその他のツールに使用する適切なアドバイス、コンパイラー以外のツールを検討しながら使用する拡張機能を決定することは、適切な答えを見つけるのに役立つ優れたアプローチです。

私が見つけたいくつかの.ccvs .cpp情報を支援するために、以下を追加したかっただけです。以下は、さまざまな環境で分類された拡張機能です(「C ++ Primer Plus」の本から):

Unixの用途:.C.cc.cxx.c

GNU C ++用途: .C.cc.cxx.cpp.c++

Digital Marsは次を使用します: .cpp.cxx

Borland C ++は以下を使用します: .cpp

Watcomが使用するもの: .cpp

マイクロソフトのVisual C ++用途: .cpp.cxx.cc

Metrowerks社のCodeWarriorは使用しています: .cpp.cp.cc.cxx.c++

環境が異なれば、サポートされる拡張機能も異なります。私もこの質問に答えようとしていて、この投稿を見つけました。この記事に基づいて、私は私が一緒に行くかもしれないと思う.hpp.cpp、クロスプラットフォーム/クロスツールの認識を容易にするために。


5
この答えは、提示された質問に本当に取り組みたいという点で他の回答よりも最も近いものです。他の言語にはそれがありますが、ファイル拡張子に関する限り、C ++にはそれがないようです。
Lucio Paiva 2016

6
Unixはどのような意味で使用していません.cppか?
キース・トンプソン、

vc ++ 6.0は.ccファイルをサポートしていません。
xus

ユーザーuser181548の@KeithThompson cehck回答
Spyros Mourelatos

@SpyrosMourelatosはい、ただし、UnixライクなシステムのC ++コード.cppがC ++ソースファイルに非常に一般的に使用するのは、依然として事実です。(引用された回答では、「cpp」はCプリプロセッサーの省略形であると記載されています。)
キース・トンプソン

79

.cpp私の知る限り、C ++の推奨拡張機能です。.hppCと区別するためだけに、C ++ヘッダーに使用することを勧める人もいます。

コンパイラはあなたが何をするかを気にしませんが、それは個人的な好みです。


60
私は.hの使用からc ++ヘッダーの.hppの使用に切り替えることにしました。主にエディタなどの他のツールも同様に知る必要があるため-gccでプリコンパイル済みヘッダーを使用する場合、プリコンパイル時に「-x c ++-header」オプションを使用しない限り、デフォルトでCを.hファイルに、C ++を.hppファイルに使用します。 .hファイル。
jdkoftinoff

5
@jd。同意した。h / cファイルがhpp / cppファイルに変わると、自動化ツールは少し簡単になります。
ポールネイサン

4
g ++は.hppをC ++ヘッダー(ヘッダーのプリコンパイル用)として認識しませんが、.hhは認識します。このため、実際には実際の違いはないため、.cpp / .hppではなく.cc / .hhを使用することになりました。
Tronic

12
@Tronic:4.3 gccは.hppを認識するため、gcc.gnu.org / onlinedocs / gcc-4.2.4 / gcc / Overall-Options.htmlgcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/Overallを
CesarB

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、多くのオープンソースプロジェクト(主にUNIXライクに基づいている)が使用しています.cc

を使用したコーディングスタイルの例.cc


1
これへの言及はありますか?私はOSS .cc対Windows .cppを見たことがない
ボビー

6
Visual Studioは、C ++用の.cppファイルを作成します。私はその背後にある歴史を知りません。
Natan Yellin

7
LLVMコーディング標準は.cpp / .hを推奨-*- C++ -*-し、ヘッダーにタグを置くllvm.org/docs/CodingStandards.html ; Mozilla Coding Styleは.cpp / .hdeveloper.mozilla.org/en-US/docs/Mozilla/Developer_guide/…を推奨しています。KDEは.Hすぎ/ .cppファイルを使用しているように見えるquickgit.kde.org
sastanin

19

使用されるその他のファイル拡張子には、.cxxand .C(大文字のC)が含まれます。Bjarne Stroustrupが最初に使用したと思います.C.cppCプリプロセッサの名前なので、C ++でも使用されたのは残念です。


13

もう1つのオプションは.cxxx45度回転したプラスの位置です。

Windows、Mac、Linuxはすべてサポートしている.c++ので、それを使用する必要があります。


12

何も意味.ccがないと言っている人はいますか?かもしれない。C ++は「C with Classes」として誕生しました。

真のこと.cc.cppほとんどのUnixシステム(CコンパイラとCプリプロセッサそれぞれ)上のコマンド名でもあります。

私は.cpp排他的に使用していますが、Windowsから始めました。.cc私はそれをますます少なく見ていますが、よりUnixの慣習です。GNU makeにはルールがある.cppので、それがおそらく推奨されます。デフォルトでは、Windowsとそれ以外の両方で機能します。一方、現代のC ++はヘッダーに拡張機能をまったく使用していません。私は本当にそれが好きではありません。私のプロジェクトはすべて.hヘッダーファイルに使用し、CとC ++の両方を可能な限りサポートしextern "C"てテストしています__cplusplus


2
それは.cwcであるべきではありませんか?:)
ジョシュア

多くのコンパイラが名前空間をサポートする前は、標準ヘッダーに.h拡張子も使用していました。一般的に、コンパイラーは、ライブラリーをグローバル名前空間に配置する非推奨の.hバージョンを提供します。これにより、レガシーコードのサポートが可能になります。.h拡張子が付いていない理由をどこかで読みましたが、標準ではファイルではなく、本質的には「組み込み」であることが許可されています。しかし、それは外典であるかもしれません。
クリフォード、

11

プロジェクト/チームで使用されている規則に従ってください。


11

自分が.cc取り組んだプロジェクトには個人的に見たことがありませんが、技術的にはコンパイラーは気にしません。

誰が気にかけるのかは、あなたのソースに取り組んでいる開発者なので、私の経験則は、あなたのチームが快適に使えるものを使うことです。「チーム」がオープンソースコミュニティである場合は、非常に一般的なものを選びます.cpp


github.com/google/googletestなどのいくつかの有名なプロジェクトが、.ccC ++実装ファイルのファイル拡張子として使用されています
Vertexwahn

10

ほとんどのスタイル規則と同様に、重要なことは2つだけです。

  1. 可能な限り、使用するものに一貫性を持たせてください。
  2. 使用されている特定の選択に依存するものは設計しないでください。

それらは矛盾しているように見えるかもしれませんが、それぞれ独自の理由で価値があります。


8

.Cそして、.cc私が見た(いくつかの)Unix指向のC ++プログラムの標準のようです。私は常に.cpp自分自身を使ってきました。なぜなら、私は本当にWindowsで作業しているだけで、それは永遠のようにそこの標準だからです。

.cpp個人的には、「C Plus Plus」の略なのでお勧めします。もちろん、ファイル拡張子が頭字語であることは非常に重要ですが、この根拠が十分に説得力のない他の重要なことが証明されれば、シフトキーの非使用(.Cおよびを除外.c++)と、可能な場合は正規表現のメタ文字の回避(除外.c++-残念ながら.、もちろん避けられません。)

これは除外しない.ccので、実際には何も意味がない(またはそうなのか)にもかかわらず、Linux指向のコードにはおそらく良い選択です。


2
ただし、「cpp」は「Cプリプロセッサ」を表すこともできます。実際、システム上のプログラム「cpp」は、Cプリプロセッサである可能性が最も高い...
Jesper

8

ソースとヘッダーにそれぞれ.Cと.hを使用しています。その選択の1つの優れた点は、コマンドラインで*.[Ch]すべてのコードファイルを選択するのが簡単であることです。.C大文字と小文字を区別しないファイルシステムでは使用が問題になる可能性がありますが、同じディレクトリに同じディレクトリが存在する場合はfoo.cfoo.Cとにかく得るものに値します:)


8

メイクファイル内で暗黙のルールを使用するには、.cc拡張子が必要です。メイクファイルの理解を深めるためにこれらのリンクを調べてください。ただし、.cc拡張子の有用性を明確に示しているため、主に2番目のリンクを調べてください。

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ますが、これらは単なるファイルです。心配ない !:-)
トムテイラー

1
「C ++ソースファイルには、「。C」ではなく「.cc」というサフィックスを使用することをお勧めします。」言葉遣いが悪いだけだと思います。.C大文字と小文字を区別しないファイルシステムのシステムでは、使用に問題が生じる可能性があります。たとえば、over makeを使用.ccすることに関しては、特定の利点はないと思います.cpp。Makefileは.cpp、C ++ソースファイルで問題なく機能します。
キーストンプソン、

7

どちらの拡張機能を使用してもかまいません。あなたがもっと好きな方を選んでください、ただ命名と一致してください。この命名規則で知っている唯一の例外は、ファイルをコンパイルすることができなかったWinDDK(またはWDK今はそうなのか)こと.ccです。Linuxではそれはほとんど問題ではありません。


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 ++プロジェクトではh、pure-Cのファイルはまれであるため、別の拡張子を追加したくありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.