C++でプログラムを開発する際は、ファイルの役割に応じてさまざまな拡張子が使用されます。
代表的なものは、次のとおりです。
| ファイルの種類 | 主な拡張子 | 主な役割 |
|---|---|---|
| ソースファイル | .cpp、.cc、.cxx | 関数やクラスなどの実装を記述する |
| ヘッダーファイル | .h、.hpp、.hh、.hxx | 関数やクラスなどの宣言を記述する |
| テンプレート・インライン実装 | .tpp、.ipp、.inl | テンプレートやインライン関数の実装を記述する |
| C++モジュール関連 | .ixx、.cppmなど | C++20以降のモジュールを記述する |
| オブジェクトファイル | .obj、.o | コンパイル後の機械語コードを保存する |
| 実行ファイル | .exe、拡張子なし | 実際に起動するプログラム |
| ライブラリファイル | .lib、.a、.dll、.so、.dylib | 他のプログラムから利用する処理をまとめる |
一般的なC++開発では、ソースファイルに.cpp、ヘッダーファイルに.hまたは.hppを使用します。
ただし、拡張子の選び方はプロジェクトや開発環境によって異なります。
重要なのは、特定の拡張子を使うことよりも、プロジェクト内で命名規則を統一することです。
C++のソースファイルで使われる拡張子
C++のソースファイルには、関数やクラスの具体的な処理を記述します。
最も広く使われている拡張子は.cppですが、.ccや.cxxなどが使われることもあります。
.cpp
.cppは、C++のソースファイルとして最も一般的な拡張子です。
ファイル名の例は次のとおりです。
main.cpp
内容は、次のように記述します。
#include <iostream>
int main()
{
std::cout << "Hello, C++!" << std::endl;
return 0;
}
.cppは、Windows、Linux、macOSを問わず、多くのコンパイラや開発環境でC++ソースファイルとして認識されます。
新しくC++のプロジェクトを作成する場合、特別な理由がなければ.cppを使用するのが分かりやすいでしょう。
.cc
.ccもC++のソースファイルに使われる拡張子です。
main.cc
.cppと基本的な役割は同じであり、使用できるC++の文法や機能に違いはありません。
.ccは、LinuxやUnix系の開発環境、一部のオープンソースプロジェクトなどで見かけることがあります。
ソースファイルに.ccを使用するプロジェクトでは、ヘッダーファイルに.hhを組み合わせる場合もあります。
calculator.cc
calculator.hh
ただし、必ずこの組み合わせにしなければならないわけではありません。
.cxx
.cxxもC++ソースファイルを表す慣習的な拡張子です。
main.cxx
一部のライブラリ、フレームワーク、歴史の長いプロジェクトなどで使われています。
.cxxのファイルと、.hxxのヘッダーファイルを組み合わせる場合もあります。
calculator.cxx
calculator.hxx
機能上は、一般的な.cppファイルと大きな違いはありません。
.C
大文字の.CをC++ソースファイルとして扱う環境もあります。
main.C
特にUnix系の一部のコンパイラでは、次のように区別されることがあります。
main.c
小文字の.cはC言語のソースファイルとして扱われます。
一方、次のような大文字の.Cは、C++のソースファイルとして扱われる場合があります。
main.C
ただし、Windowsなど、大文字と小文字を通常は区別しない環境では混乱の原因になります。
そのため、新規プロジェクトでは.Cよりも.cpp、.cc、.cxxのいずれかを使用するほうが安全です。
C++のヘッダーファイルで使われる拡張子
ヘッダーファイルには、主に次のような内容を記述します。
- 関数の宣言
- クラスの宣言
- 構造体の定義
- 列挙型の定義
- 定数
- 型エイリアス
- テンプレートの宣言や定義
- インライン関数
代表的な拡張子は.hと.hppです。
.h
.hは、C言語とC++の両方で広く使われているヘッダーファイルの拡張子です。
calculator.h
たとえば、関数の宣言を次のように記述します。
#ifndef CALCULATOR_H
#define CALCULATOR_H
int add(int a, int b);
#endif
実際の処理は、対応する.cppファイルに記述します。
#include "calculator.h"
int add(int a, int b)
{
return a + b;
}
.hはC言語でもC++でも一般的に使用されます。
そのため、ファイル名だけではC言語向けなのか、C++向けなのかを判断できない場合があります。
ただし、C++専用のクラスやテンプレートが書かれている.hファイルも数多く存在します。
.hpp
.hppは、C++向けのヘッダーファイルであることを分かりやすく示すために使用される拡張子です。
calculator.hpp
内容は、次のように記述できます。
#ifndef CALCULATOR_HPP
#define CALCULATOR_HPP
class Calculator
{
public:
int add(int a, int b) const;
};
#endif
.hppを使用すると、ファイル名を見ただけでC++向けのヘッダーであることを判断しやすくなります。
そのため、次のようなプロジェクトで採用されることがあります。
- C言語とC++が混在している
- C++専用のヘッダーであることを明示したい
- ソースファイルとヘッダーファイルの命名規則を分かりやすくしたい
- ヘッダーオンリーライブラリを作成している
ただし、.hと.hppに本質的な機能差があるわけではありません。
コンパイラが.hppだから特別なC++機能を有効にするわけではなく、主に開発者がファイルの用途を判断しやすくするための命名慣習です。
.hh
.hhもC++のヘッダーファイルに使用される拡張子です。
calculator.hh
.ccのソースファイルと組み合わせて使用されることがあります。
calculator.cc
calculator.hh
LinuxやUnix系のプロジェクトで見かけることがありますが、.hや.hppほど一般的ではありません。
.hxx
.hxxもC++のヘッダーファイルを表す拡張子です。
calculator.hxx
.cxxのソースファイルと組み合わせる場合があります。
calculator.cxx
calculator.hxx
一部のライブラリやフレームワークでは採用されていますが、新しい一般的なC++プロジェクトでは、.hまたは.hppのほうが分かりやすいでしょう。
.hと.hppの違い
.hと.hppは、どちらもC++のヘッダーファイルとして使用できます。
技術的な機能に本質的な違いはありません。
違いは、主にファイル名から伝わる意味です。
| 拡張子 | 一般的な使われ方 |
|---|---|
.h | CまたはC++のヘッダーとして広く使用される |
.hpp | C++向けのヘッダーであることを明示するために使用されることがある |
たとえば、C言語とC++の両方から読み込めるヘッダーには.hを使い、C++のクラスやテンプレートを含むヘッダーには.hppを使うという命名ルールがあります。
一方で、すべてのC++ヘッダーを.hに統一しているプロジェクトも珍しくありません。
そのため、.hと.hppのどちらが正しいかではなく、プロジェクトの方針に合わせることが重要です。
ソースファイルとヘッダーファイルの違い
C++では、クラスや関数の宣言と実装を別々のファイルに分けることがあります。
一般的には、ヘッダーファイルに宣言を書き、ソースファイルに実装を書きます。
ヘッダーファイルに宣言を書く
たとえば、calculator.hppにクラスの宣言を記述します。
#ifndef CALCULATOR_HPP
#define CALCULATOR_HPP
class Calculator
{
public:
int add(int a, int b) const;
};
#endif
ソースファイルに実装を書く
calculator.cppには、メンバー関数の実装を記述します。
#include "calculator.hpp"
int Calculator::add(int a, int b) const
{
return a + b;
}
使用するファイルからヘッダーを読み込む
main.cppでは、calculator.hppを読み込んでクラスを使用します。
#include <iostream>
#include "calculator.hpp"
int main()
{
Calculator calculator;
std::cout << calculator.add(10, 20) << std::endl;
return 0;
}
このように宣言と実装を分離すると、ファイルの役割が明確になり、プログラムを管理しやすくなります。
.cと.cppの違い
C言語のソースファイルには、通常.cを使用します。
main.c
C++のソースファイルには、通常.cppを使用します。
main.cpp
拡張子が異なると、コンパイラがどの言語としてファイルを扱うかが変わる場合があります。
.cファイル
.cファイルは、通常C言語としてコンパイルされます。
#include <stdio.h>
int main(void)
{
printf("Hello, C!\n");
return 0;
}
C言語では、一般的にprintfなどを利用します。
.cppファイル
.cppファイルは、通常C++としてコンパイルされます。
#include <iostream>
int main()
{
std::cout << "Hello, C++!" << std::endl;
return 0;
}
C++には、C言語にはない多くの機能があります。
代表的なものは次のとおりです。
- クラス
- 継承
- テンプレート
- 名前空間
- 例外処理
- 関数のオーバーロード
- ラムダ式
- 参照
- 標準テンプレートライブラリ
C++のコードを.cとして保存すると、C言語として解釈され、コンパイルエラーになる可能性があります。
C++のプログラムは、原則として.cppなどのC++向け拡張子で保存するのが適切です。
拡張子だけで言語が完全に決まるわけではない
ファイルの拡張子は、コンパイラや開発環境が言語を判断する重要な手掛かりです。
ただし、拡張子だけで言語が完全に決まるわけではありません。
コンパイラのオプションを使えば、拡張子に関係なく言語を明示できる場合があります。
gccでC言語をコンパイルする例
gcc main.c -o app
.cという拡張子から、通常はC言語のソースファイルとして扱われます。
g++でC++をコンパイルする例
g++ main.cpp -o app
.cppという拡張子からC++としてコンパイルされ、リンク時にはC++標準ライブラリも通常は自動的に指定されます。
gccでもC++ファイルを認識することがある
次のように、.cppファイルをgccコマンドに渡した場合でも、ファイル自体はC++ソースとして認識されます。
gcc main.cpp
ただし、最終的なリンクまでgccで行う場合、C++標準ライブラリが自動的にリンクされず、エラーになることがあります。
そのため、C++のコンパイルからリンクまでは、通常g++を使用するのが分かりやすいでしょう。
言語を明示する例
GCC系のコンパイラでは、-xオプションを使って言語を指定できます。
g++ -x c++ main.txt -o app
この場合、ファイル名がmain.txtであっても、C++のソースファイルとして扱われます。
ただし、通常の開発では混乱を避けるため、内容に合った拡張子を使用することが重要です。
ヘッダーオンリーライブラリで使われる拡張子
C++には、処理の実装をすべてヘッダーファイルに記述する「ヘッダーオンリーライブラリ」があります。
ヘッダーオンリーライブラリでは、.hppがよく使われます。
math_utils.hpp
内容の例は次のとおりです。
#ifndef MATH_UTILS_HPP
#define MATH_UTILS_HPP
template <typename T>
T add(T a, T b)
{
return a + b;
}
#endif
テンプレートは、使用される場所から定義を確認できる必要があるため、宣言だけでなく実装もヘッダーファイルに書くことが一般的です。
ただし、ヘッダーオンリーライブラリだから必ず.hppを使わなければならないわけではありません。
.hでも技術的には問題ありません。
テンプレート実装用の拡張子
テンプレートの宣言と実装を見た目の上で分けるために、補助的な拡張子を使用することがあります。
代表的なものは.tppと.ippです。
.tpp
.tppは、テンプレートの実装を記述するファイルとして使用されることがあります。
vector.hpp
vector.tpp
vector.hppには、テンプレートクラスの宣言を記述します。
#ifndef VECTOR_HPP
#define VECTOR_HPP
template <typename T>
class Vector
{
public:
void push(const T& value);
};
#include "vector.tpp"
#endif
vector.tppには、実装を記述します。
template <typename T>
void Vector<T>::push(const T& value)
{
// 実装
}
.tppは通常、単独でコンパイルするのではなく、対応するヘッダーファイルから#includeして使用します。
.ipp
.ippも、テンプレートやインライン関数の実装を分離するために使用されることがあります。
algorithm.hpp
algorithm.ipp
.tppと同様に、.ippも対応するヘッダーファイルから読み込んで使用するケースが一般的です。
ただし、.tppや.ippはC++規格で定められた必須拡張子ではありません。
プロジェクト内でファイルの役割を分かりやすくするための命名慣習です。
インライン実装用の拡張子
インライン関数などの実装を別ファイルに分ける場合、.inlが使われることがあります。
.inl
ファイル名の例は次のとおりです。
matrix.hpp
matrix.inl
matrix.hppの末尾から、次のように読み込みます。
#include "matrix.inl"
.inlも、コンパイラにとって必ず特別な意味を持つ拡張子ではありません。
開発者がファイルの役割を判断しやすくするために使用されます。
C++20のモジュールで使われる拡張子
C++20では、従来のヘッダーファイルとは異なる仕組みとして「モジュール」が導入されました。
モジュールを使うことで、コードの公開範囲を管理しやすくなり、大規模なプロジェクトではビルド時間の改善につながる可能性があります。
ただし、C++規格では、モジュールファイルの拡張子が一つに統一されているわけではありません。
使用するコンパイラ、IDE、ビルドシステムによって、対応する拡張子や設定が異なります。
.ixx
.ixxは、特にMicrosoft Visual C++やVisual Studioで使用されるモジュールインターフェースファイルの拡張子です。
calculator.ixx
内容の例は次のとおりです。
export module calculator;
export int add(int a, int b)
{
return a + b;
}
別のファイルからは、次のように読み込みます。
import calculator;
.cppm
.cppmも、C++モジュールインターフェースファイルとして使用される拡張子です。
calculator.cppm
ClangやGCCを使用する環境、クロスプラットフォームのプロジェクトなどで採用されることがあります。
ただし、.cppmを使用すれば、すべてのコンパイラで自動的に同じように動作するとは限りません。
コンパイラのバージョンやビルドオプション、ビルドシステムの設定を確認する必要があります。
その他のモジュール関連拡張子
開発環境やプロジェクトによっては、次のような拡張子が使われることもあります。
.ccm
.cxxm
.c++m
一方、モジュールの実装部分には、通常の.cppや.cc、.cxxが使用される場合もあります。
モジュール関連の拡張子は、従来の.cppほど統一されていません。
そのため、実際にモジュールを使用する場合は、使用しているコンパイラやIDEの公式ドキュメントを確認することが重要です。
コンパイル後に生成されるファイルの拡張子
C++の開発では、ソースファイルをコンパイルすると、さまざまな中間ファイルや実行ファイルが生成されます。
これらは開発者が直接編集するものではなく、コンパイラやリンカーによって作成されるファイルです。
オブジェクトファイル
ソースファイルをコンパイルすると、オブジェクトファイルが生成されます。
Windowsでは、一般的に.objです。
main.obj
LinuxやmacOSでは、一般的に.oです。
main.o
オブジェクトファイルには、ソースコードを機械語に変換した内容が保存されます。
ただし、通常はオブジェクトファイル単体では実行できません。
複数のオブジェクトファイルやライブラリをリンカーがまとめることで、実行ファイルが作成されます。
実行ファイル
Windowsでは、実行ファイルに.exeが使われます。
app.exe
LinuxやmacOSでは、実行ファイルに拡張子を付けないことが一般的です。
app
たとえば、次のようにコンパイルします。
g++ main.cpp -o app
LinuxやmacOSでは、appという実行ファイルが作成されます。
Windowsでは、環境によってapp.exeが生成されます。
静的ライブラリ
静的ライブラリは、リンク時に実行ファイルへ組み込まれるライブラリです。
Windowsでは、一般的に.libが使われます。
calculator.lib
LinuxやmacOSでは、一般的に.aが使われます。
libcalculator.a
静的ライブラリの内容は、最終的な実行ファイルに取り込まれるため、実行時に別のライブラリファイルを必要としない構成にできます。
共有ライブラリ
共有ライブラリは、実行時にプログラムから読み込まれるライブラリです。
Windowsでは、一般的に.dllが使われます。
calculator.dll
Linuxでは、一般的に.soが使われます。
libcalculator.so
macOSでは、一般的に.dylibが使われます。
libcalculator.dylib
共有ライブラリを使用すると、複数のプログラムから同じライブラリを共有できます。
ただし、実行時に必要なライブラリが見つからないと、プログラムを起動できない場合があります。
Windowsの.libには複数の役割がある
Windowsの.libには、大きく分けて次の2種類があります。
- 静的ライブラリ
- DLLを利用するためのインポートライブラリ
どちらも拡張子は.libですが、役割は異なります。
そのため、.libだから必ず静的ライブラリであるとは限りません。
Visual Studioでよく使われる拡張子
Microsoft Visual StudioでC++を開発すると、ソースコード以外にもさまざまなファイルが作成されます。
代表的なものは次のとおりです。
| 拡張子 | 主な内容 |
|---|---|
.cpp | C++ソースファイル |
.h、.hpp | ヘッダーファイル |
.ixx、.cppm | C++モジュール関連ファイル |
.sln | Visual Studioのソリューションファイル |
.vcxproj | Visual C++のプロジェクトファイル |
.vcxproj.filters | ソリューションエクスプローラー上の分類情報 |
.obj | オブジェクトファイル |
.pdb | デバッグ情報 |
.exe | 実行ファイル |
.dll | 動的リンクライブラリ |
.lib | 静的ライブラリまたはインポートライブラリ |
.slnや.vcxprojは、C++のソースコードではありません。
Visual Studioがソリューションやプロジェクトの構成、ビルド設定、参照ファイルなどを管理するためのファイルです。
CMakeでよく使われるファイル
C++プロジェクトでは、ビルドシステムとしてCMakeが使われることがあります。
CMakeの代表的な設定ファイルは、次のものです。
CMakeLists.txt
CMakeLists.txtには、どのソースファイルをコンパイルするか、どのC++規格を使用するかなどを記述します。
CMakeの基本的な設定例
cmake_minimum_required(VERSION 3.20)
project(SampleProject LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(sample
main.cpp
calculator.cpp
)
それぞれの設定には、次の意味があります。
project(SampleProject LANGUAGES CXX)
C++を使用するプロジェクトであることを指定します。
set(CMAKE_CXX_STANDARD 20)
C++20を使用するように指定します。
set(CMAKE_CXX_STANDARD_REQUIRED ON)
指定したC++規格を必須にします。
この設定がない場合、環境によっては利用可能な古い規格へ調整される可能性があります。
set(CMAKE_CXX_EXTENSIONS OFF)
コンパイラ独自の拡張機能ではなく、標準的なC++規格を使用するように設定します。
CMakeLists.txtはC++のソースファイルではなく、ビルド方法を定義するための設定ファイルです。
小規模なC++プロジェクトの構成例
小規模なプロジェクトでは、次のようなファイル構成にできます。
sample-project/
├── main.cpp
├── calculator.cpp
└── calculator.hpp
calculator.hpp
クラスの宣言を記述します。
#ifndef CALCULATOR_HPP
#define CALCULATOR_HPP
class Calculator
{
public:
int add(int a, int b) const;
};
#endif
calculator.cpp
クラスのメンバー関数を実装します。
#include "calculator.hpp"
int Calculator::add(int a, int b) const
{
return a + b;
}
main.cpp
作成したクラスを使用します。
#include <iostream>
#include "calculator.hpp"
int main()
{
Calculator calculator;
std::cout << calculator.add(10, 20) << std::endl;
return 0;
}
コンパイル方法
GCCまたはClang系の環境では、次のようにコンパイルできます。
g++ main.cpp calculator.cpp -o sample
複数の.cppファイルをまとめて指定することで、一つの実行ファイルを作成できます。
規模が大きいC++プロジェクトの構成例
規模が大きくなると、ソースファイル、ヘッダーファイル、テストコードなどをディレクトリで分けることがあります。
sample-project/
├── CMakeLists.txt
├── include/
│ └── calculator.hpp
├── src/
│ ├── calculator.cpp
│ └── main.cpp
└── tests/
└── calculator_test.cpp
各ディレクトリの主な役割は次のとおりです。
include
外部から参照するヘッダーファイルを配置します。
include/calculator.hpp
ライブラリとして公開するヘッダーをまとめる場合にも使用されます。
src
プログラムの実装を記述するソースファイルを配置します。
src/main.cpp
src/calculator.cpp
tests
単体テストや結合テストなどのテストコードを配置します。
tests/calculator_test.cpp
CMakeLists.txt
プロジェクトのビルド設定を記述します。
規模が大きくなるほど、ファイルの役割ごとにディレクトリを整理することが重要になります。
C++ファイルの拡張子を選ぶ際の注意点
拡張子そのものに本質的な機能差がない場合でも、選び方によってプロジェクトの分かりやすさや管理のしやすさが変わります。
プロジェクト内で統一する
次のように、複数の命名規則が無計画に混在すると、ファイルの役割が分かりにくくなります。
main.cpp
calculator.cc
user.cxx
math.h
network.hpp
database.hxx
技術的にはコンパイルできる場合がありますが、統一感がなく、管理しにくい構成です。
たとえば、次のように統一すると分かりやすくなります。
main.cpp
calculator.cpp
user.cpp
math.hpp
network.hpp
database.hpp
既存プロジェクトに参加する場合は、自分の好みで変更するのではなく、現在使われている命名規則に合わせることが重要です。
大文字と小文字に注意する
ファイル名の大文字と小文字を区別するかどうかは、OSだけでなく、使用しているファイルシステムの設定によって異なります。
Linuxでは、一般的にファイル名の大文字と小文字が区別されます。
macOSでは、標準的な環境では区別されない場合がありますが、大文字と小文字を区別するファイルシステムも使用できます。
Windowsでは通常区別されませんが、設定や開発環境によって挙動が異なる可能性があります。
たとえば、次の2つは別のファイルとして扱われる場合があります。
Calculator.hpp
calculator.hpp
ヘッダーを読み込むときも、大文字と小文字を正確に合わせる必要があります。
#include "Calculator.hpp"
Windowsでは問題なく動作しても、Linuxへ移行した際にエラーになることがあります。
異なる環境でのトラブルを防ぐため、実際のファイル名と#includeで指定する名前を完全に一致させることが重要です。
二重拡張子に注意する
Windowsでファイルの拡張子が非表示になっていると、次のような二重拡張子で保存してしまうことがあります。
main.cpp.txt
画面上ではmain.cppのように見えても、実際には.txtファイルです。
コンパイラがファイルを認識しない場合は、本当の拡張子を確認してください。
自動生成ファイルを直接編集しない
.obj、.o、.exe、.dll、.pdbなどは、コンパイラやリンカーによって自動的に生成されるファイルです。
これらは通常、開発者が直接編集するものではありません。
プログラムを変更する場合は、元となる.cppや.h、.hppなどを編集し、再度ビルドします。
開発環境の設定を確認する
一般的な拡張子であっても、IDEやビルドシステムの設定によって自動認識されない場合があります。
特に次のような拡張子を使用する場合は注意が必要です。
.tpp.ipp.inl.ixx.cppm.ccm.cxxm
C++モジュール関連の拡張子は、コンパイラの対応状況や必要なオプションが異なります。
初心者におすすめの拡張子
新しくC++を学ぶ場合は、次の組み合わせが分かりやすいでしょう。
main.cpp
calculator.cpp
calculator.hpp
それぞれの役割は次のとおりです。
| ファイル | 役割 |
|---|---|
main.cpp | プログラムの開始地点を記述する |
calculator.cpp | クラスや関数の実装を記述する |
calculator.hpp | クラスや関数の宣言を記述する |
ヘッダーファイルを.hにしても問題ありません。
main.cpp
calculator.cpp
calculator.h
どちらも一般的な構成です。
初心者の場合は、途中で拡張子の規則を変更せず、最初に決めた形式で統一すると理解しやすくなります。
C++で使われる代表的な拡張子一覧
| 拡張子 | 主な用途 | 補足 |
|---|---|---|
.cpp | C++ソースファイル | 最も一般的 |
.cc | C++ソースファイル | Unix系のプロジェクトなどで使用 |
.cxx | C++ソースファイル | 一部のライブラリや環境で使用 |
.C | C++ソースファイル | 大文字と小文字の区別に注意 |
.h | CまたはC++のヘッダー | 非常に一般的 |
.hpp | C++向けヘッダー | C++専用であることを示しやすい |
.hh | C++ヘッダー | .ccと組み合わせる場合がある |
.hxx | C++ヘッダー | .cxxと組み合わせる場合がある |
.tpp | テンプレート実装 | 通常はヘッダーから読み込む |
.ipp | テンプレート・インライン実装 | プロジェクトによる |
.inl | インライン実装 | プロジェクトによる |
.ixx | C++モジュール | Visual Studioでよく使用される |
.cppm | C++モジュール | ClangやGCC系の環境などで使用される |
.obj | オブジェクトファイル | 主にWindowsで使用 |
.o | オブジェクトファイル | 主にLinuxやmacOSで使用 |
.exe | 実行ファイル | 主にWindowsで使用 |
.lib | 静的ライブラリまたはインポートライブラリ | 主にWindowsで使用 |
.a | 静的ライブラリ | 主にLinuxやmacOSで使用 |
.dll | 共有ライブラリ | Windowsで使用 |
.so | 共有ライブラリ | Linuxで使用 |
.dylib | 共有ライブラリ | macOSで使用 |
.pdb | デバッグ情報 | Visual Studioなどで生成される |
.sln | Visual Studioソリューション | プロジェクト管理用 |
.vcxproj | Visual C++プロジェクト | ビルド設定などを管理する |
まとめ
C++のソースファイルでは、.cppが最も一般的です。
ヘッダーファイルには、.hまたは.hppが広く使われています。
基本的な組み合わせは、次のとおりです。
main.cpp
sample.cpp
sample.h
または、次のように.hppを使うこともできます。
main.cpp
sample.cpp
sample.hpp
.hと.hppには本質的な機能差はありません。
.hppは、C++向けのヘッダーファイルであることを分かりやすく示すための命名慣習です。
また、.ccや.cxxもC++ソースファイルとして使用できますが、新しい一般的なプロジェクトでは.cppが分かりやすいでしょう。
C++20のモジュールでは.ixxや.cppmなどが使われますが、モジュールの拡張子はC++規格で一つに統一されていません。コンパイラや開発環境ごとに対応状況を確認する必要があります。
拡張子によってC++の機能が変わるわけではありません。
重要なのは、使用するコンパイラや開発環境に対応した拡張子を選び、プロジェクト全体で命名規則を統一することです。
以上、C++のファイルの拡張子についてでした。
最後までお読みいただき、ありがとうございました。
