[UE5.7][C++]unrealengine5 C++プロジェクト VisualStudio いらないファイル消す Zipしたい時

これだけにする

プロジェクトフォルダ直下にある以下のフォルダを削除してください。

  • .vs: Visual Studio のキャッシュやユーザー設定が保存されている隠しフォルダ。
  • Binaries: コンパイルされた実行ファイルやライブラリが保存されるフォルダ。
  • Intermediate: ビルドプロセス中の中間ファイルが保存されるフォルダ。
  • Saved: セーブデータ、スクリーンショット、ログ、クラッシュレポートなどが保存されるフォルダ。
  • DerivedDataCache (DDC): エディタがアセットを処理したキャッシュデータが保存されるフォルダ。容量が非常に大きくなることがあります。 

注意点:

  • Content フォルダと .uproject ファイル、Source フォルダ (C++プロジェクトの場合) は絶対に削除しないでください。これらがプロジェクトの本体です。
  • これらのフォルダを削除した後、プロジェクトを開く前にVisual Studioのソリューションをクリーンアップし、必要に応じてソリューションを再生成.uproject ファイルを右クリックし Generate Visual Studio project files を選択)すると、より確実です。
  • その後、残った必要なファイル(ContentSource.uproject.slnConfig など)をZIP圧縮します。

MSYS2のMINGW64 → pacman やOpenGL関連ライブラリがインストール可能 な環境でGLSLを描画できた。

bash: pacman: command not found

なるほど、そのメッセージは**MSYS2のMINGW64ではなく、単体のGit Bash(MINGW64)**を使っていることを示しています。
Git Bash の MINGW64 環境は 名前に「MINGW64」と付いていても、MSYS2 とは別物であり、pacman などのパッケージマネージャーは含まれていません。


✅ 何が起きているかまとめ

  • Git BashのMINGW64pacman や開発用ライブラリなし
  • MSYS2のMINGW64pacman やOpenGL関連ライブラリがインストール可能

🔄 解決方法:MSYS2の導入

GLSLやOpenGLを本格的に使いたい場合、MSYS2を導入するのが一番簡単かつ強力です。

1. MSYS2をダウンロード・インストール

MSYS2公式サイト からインストーラーをダウンロードしてインストールします。

MSYS2 は「Windows 向けソフトウェア配布および構築プラットフォーム」です。

しょぼいウィルスソフトが反応する可能性があるので切っておく

  1. プロジェクトのコンパイルを開始するには、mingw-w64 GCCなどのツールをインストールする必要があるでしょう。以下のコマンドを実行してください。
pacman -S mingw-w64-ucrt-x86_64-gcc
  1. ターミナルウィンドウに以下の出力が表示されます。「Enter」キーを押して続行してください。

furcr@furcraea_built UCRT64 ~
$ pacman -S mingw-w64-ucrt-x86_64-gcc
resolving dependencies...
looking for conflicting packages...

Packages (16) mingw-w64-ucrt-x86_64-binutils-2.44-4
              mingw-w64-ucrt-x86_64-crt-git-13.0.0.r21.gf5469ff36-1
              mingw-w64-ucrt-x86_64-gcc-libs-15.1.0-5  mingw-w64-ucrt-x86_64-gettext-runtime-0.25-1
              mingw-w64-ucrt-x86_64-gmp-6.3.0-2
              mingw-w64-ucrt-x86_64-headers-git-13.0.0.r21.gf5469ff36-1
              mingw-w64-ucrt-x86_64-isl-0.27-1  mingw-w64-ucrt-x86_64-libiconv-1.18-1
              mingw-w64-ucrt-x86_64-libwinpthread-13.0.0.r21.gf5469ff36-1
              mingw-w64-ucrt-x86_64-mpc-1.3.1-2  mingw-w64-ucrt-x86_64-mpfr-4.2.2-1
              mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-4
              mingw-w64-ucrt-x86_64-winpthreads-13.0.0.r21.gf5469ff36-1
              mingw-w64-ucrt-x86_64-zlib-1.3.1-1  mingw-w64-ucrt-x86_64-zstd-1.5.7-1
              mingw-w64-ucrt-x86_64-gcc-15.1.0-5

Total Download Size:    69.02 MiB
Total Installed Size:  540.65 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
 mingw-w64-ucrt-x86_64-crt-...     4.6 MiB  1740 KiB/s 00:03 [###############################] 100%
 mingw-w64-ucrt-x86_64-isl-...  1453.5 KiB   502 KiB/s 00:03 [###############################] 100%
 mingw-w64-ucrt-x86_64-binu...     6.0 MiB  1980 KiB/s 00:03 [###############################] 100%
 mingw-w64-ucrt-x86_64-gcc-...  1043.5 KiB  2.24 MiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-libi...   725.4 KiB  1656 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-head...     6.4 MiB  1811 KiB/s 00:04 [###############################] 100%
 mingw-w64-ucrt-x86_64-gmp-...   578.5 KiB  1297 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-mpfr...   541.9 KiB  1234 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-gett...   333.5 KiB   836 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-gcc-...    46.6 MiB  11.1 MiB/s 00:04 [###############################] 100%
 mingw-w64-ucrt-x86_64-zstd...   642.3 KiB   605 KiB/s 00:01 [###############################] 100%
 mingw-w64-ucrt-x86_64-mpc-...   128.3 KiB   276 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-zlib...    92.1 KiB   242 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-winp...    41.8 KiB   109 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-libw...    29.5 KiB  79.2 KiB/s 00:00 [###############################] 100%
 mingw-w64-ucrt-x86_64-wind...     3.0 KiB  5.10 KiB/s 00:01 [###############################] 100%
 Total (16/16)                    69.0 MiB  12.9 MiB/s 00:05 [###############################] 100%
(16/16) checking keys in keyring                             [###############################] 100%
(16/16) checking package integrity                           [###############################] 100%
(16/16) loading package files                                [###############################] 100%
(16/16) checking for file conflicts                          [###############################] 100%
(16/16) checking available disk space                        [###############################] 100%
:: Processing package changes...
( 1/16) installing mingw-w64-ucrt-x86_64-libwinpthread       [###############################] 100%
( 2/16) installing mingw-w64-ucrt-x86_64-gcc-libs            [###############################] 100%
( 3/16) installing mingw-w64-ucrt-x86_64-libiconv            [###############################] 100%
( 4/16) installing mingw-w64-ucrt-x86_64-gettext-runtime     [###############################] 100%
( 5/16) installing mingw-w64-ucrt-x86_64-zlib                [###############################] 100%
( 6/16) installing mingw-w64-ucrt-x86_64-zstd                [###############################] 100%
( 7/16) installing mingw-w64-ucrt-x86_64-binutils            [###############################] 100%
( 8/16) installing mingw-w64-ucrt-x86_64-headers-git         [###############################] 100%
( 9/16) installing mingw-w64-ucrt-x86_64-crt-git             [###############################] 100%
(10/16) installing mingw-w64-ucrt-x86_64-gmp                 [###############################] 100%
(11/16) installing mingw-w64-ucrt-x86_64-isl                 [###############################] 100%
(12/16) installing mingw-w64-ucrt-x86_64-mpfr                [###############################] 100%
(13/16) installing mingw-w64-ucrt-x86_64-mpc                 [###############################] 100%
(14/16) installing mingw-w64-ucrt-x86_64-windows-default...  [###############################] 100%
(15/16) installing mingw-w64-ucrt-x86_64-winpthreads         [###############################] 100%
(16/16) installing mingw-w64-ucrt-x86_64-gcc                 [###############################] 100%

furcr@furcraea_built UCRT64 ~
$

gccこれで、Windows 用のソフトウェアをビルドするために
呼び出すことができます。

gcc --version
gcc.exe (Rev5, Built by MSYS2 project) 15.1.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


furcr@furcraea_built UCRT64 ~
$

MSYS2 をインストールすると、 経由で自動的に更新されます。
詳細については、
更新ガイドを
pacman参照してください。

2. シェルの選択(重要)

インストール後、以下のいずれかのターミナルを起動:

  • MSYS2 MinGW 64-bit(おすすめ)
    /mingw64/bin 環境になり、pacmanも使える

開発ツールとライブラリのインストール

pacman -Syu   # はじめに全体アップデート


furcr@furcraea_built MINGW64 ~
$ pacman -Syu
:: Synchronizing package databases...
 clangarm64 is up to date
 mingw32 is up to date
 mingw64 is up to date
 ucrt64 is up to date
 clang64 is up to date
 msys is up to date
:: Starting core system upgrade...
 there is nothing to do
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...

Packages (19) curl-8.14.1-2  gcc-libs-15.1.0-2  libcurl-8.14.1-2  libffi-3.5.1-1
              libhogweed-3.10.2-1  libnettle-3.10.2-1  libnghttp3-1.10.1-1  libngtcp2-1.13.0-2
              libopenssl-3.5.1-1  libsqlite-3.50.2-1
              mingw-w64-ucrt-x86_64-crt-git-13.0.0.r57.gc1a7f831b-1
              mingw-w64-ucrt-x86_64-gcc-15.1.0-6  mingw-w64-ucrt-x86_64-gcc-libs-15.1.0-6
              mingw-w64-ucrt-x86_64-gettext-runtime-0.25.1-1
              mingw-w64-ucrt-x86_64-headers-git-13.0.0.r57.gc1a7f831b-1
              mingw-w64-ucrt-x86_64-libwinpthread-13.0.0.r57.gc1a7f831b-1
              mingw-w64-ucrt-x86_64-winpthreads-13.0.0.r57.gc1a7f831b-1  nettle-3.10.2-1
              openssl-3.5.1-1

Total Download Size:    65.09 MiB
Total Installed Size:  489.36 MiB
Net Upgrade Size:        1.06 MiB

:: Proceed with installation? [Y/n]

必要なライブラリ

pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-glfw mingw-w64-x86_64-glew mingw-w64-x86_64-glm

furcr@furcraea_built MINGW64 ~
$ pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-glfw mingw-w64-x86_64-glew mingw-w64-x86_64-glm
:: There are 13 members in group mingw-w64-x86_64-toolchain:
:: Repository mingw64
   1) mingw-w64-x86_64-binutils  2) mingw-w64-x86_64-crt-git  3) mingw-w64-x86_64-gcc
   4) mingw-w64-x86_64-gdb  5) mingw-w64-x86_64-gdb-multiarch  6) mingw-w64-x86_64-headers-git
   7) mingw-w64-x86_64-libmangle-git  8) mingw-w64-x86_64-libwinpthread  9) mingw-w64-x86_64-make
   10) mingw-w64-x86_64-pkgconf  11) mingw-w64-x86_64-tools-git  12) mingw-w64-x86_64-winpthreads
   13) mingw-w64-x86_64-winstorecompat-git

Enter a selection (default=all):そのまま Enter キーを押す(default=all)

resolving dependencies...
looking for conflicting packages...

Packages (43) mingw-w64-x86_64-bzip2-1.0.8-3  mingw-w64-x86_64-expat-2.7.1-2
              mingw-w64-x86_64-gcc-libs-15.1.0-6  mingw-w64-x86_64-gettext-runtime-0.25.1-1
              mingw-w64-x86_64-gmp-6.3.0-2  mingw-w64-x86_64-isl-0.27-1
              mingw-w64-x86_64-libffi-3.5.1-1  mingw-w64-x86_64-libiconv-1.18-1
              mingw-w64-x86_64-libsystre-1.0.2-1  mingw-w64-x86_64-libtre-0.9.0-1
              mingw-w64-x86_64-mpc-1.3.1-2  mingw-w64-x86_64-mpdecimal-4.0.1-1
              mingw-w64-x86_64-mpfr-4.2.2-1  mingw-w64-x86_64-ncurses-6.5.20241228-3
              mingw-w64-x86_64-openssl-3.5.1-1  mingw-w64-x86_64-python-3.12.11-1
              mingw-w64-x86_64-readline-8.2.013-1  mingw-w64-x86_64-sqlite3-3.50.2-1
              mingw-w64-x86_64-tcl-8.6.16-1  mingw-w64-x86_64-termcap-1.3.1-7
              mingw-w64-x86_64-tk-8.6.16-1  mingw-w64-x86_64-tzdata-2025b-2
              mingw-w64-x86_64-windows-default-manifest-6.4-4  mingw-w64-x86_64-xxhash-0.8.3-1
              mingw-w64-x86_64-xz-5.8.1-2  mingw-w64-x86_64-zlib-1.3.1-1
              mingw-w64-x86_64-zstd-1.5.7-1  mingw-w64-x86_64-binutils-2.44-4
              mingw-w64-x86_64-crt-git-13.0.0.r57.gc1a7f831b-1  mingw-w64-x86_64-gcc-15.1.0-6
              mingw-w64-x86_64-gdb-16.3-1  mingw-w64-x86_64-gdb-multiarch-16.3-1
              mingw-w64-x86_64-glew-2.2.0-3  mingw-w64-x86_64-glfw-3.4-1
              mingw-w64-x86_64-glm-1.0.1-1  mingw-w64-x86_64-headers-git-13.0.0.r57.gc1a7f831b-1
              mingw-w64-x86_64-libmangle-git-13.0.0.r57.gc1a7f831b-1
              mingw-w64-x86_64-libwinpthread-13.0.0.r57.gc1a7f831b-1  mingw-w64-x86_64-make-4.4.1-3
              mingw-w64-x86_64-pkgconf-1~2.5.1-1
              mingw-w64-x86_64-tools-git-13.0.0.r57.gc1a7f831b-1
              mingw-w64-x86_64-winpthreads-13.0.0.r57.gc1a7f831b-1
              mingw-w64-x86_64-winstorecompat-git-13.0.0.r57.gc1a7f831b-1

Total Download Size:   126.25 MiB
Total Installed Size:  918.18 MiB

:: Proceed with installation? [Y/n] そのまま Enter キーを押す
:: Retrieving packages...
 mingw-w64-x86_64-gdb-multi...     6.4 MiB  2.83 MiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-headers-g...     6.4 MiB  2.55 MiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-openssl-3...     7.9 MiB  3.04 MiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-binutils-...     6.0 MiB  9.99 MiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-python-3....    23.2 MiB  7.71 MiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-gcc-15.1....    46.6 MiB  14.2 MiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-gdb-16.3-...     4.6 MiB  5.62 MiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-glm-1.0.1...     3.4 MiB  6.33 MiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-tcl-8.6.1...     2.7 MiB  5.43 MiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-crt-git-1...     4.5 MiB  4.20 MiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-sqlite3-3...     2.3 MiB  4.55 MiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-tk-8.6.16...     2.0 MiB  4.29 MiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-ncurses-6...  1747.4 KiB  3.53 MiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-isl-0.27-...  1456.4 KiB  2.96 MiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-gcc-libs-...  1044.6 KiB  2.11 MiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libiconv-...   726.4 KiB  1897 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-glew-2.2....   635.3 KiB  1390 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-zstd-1.5....   642.7 KiB  1060 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-gmp-6.3.0...   577.8 KiB  1201 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-mpfr-4.2....   542.5 KiB  1203 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-xz-5.8.1-...   474.4 KiB   892 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-readline-...   411.7 KiB   907 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-gettext-r...   335.2 KiB   685 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-tools-git...   323.2 KiB   710 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-tzdata-20...   221.2 KiB   643 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-glfw-3.4-...   177.0 KiB   501 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-mpdecimal...   155.8 KiB   449 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-expat-2.7...   165.9 KiB   384 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-xxhash-0....   119.2 KiB   341 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-make-4.4....   138.5 KiB   287 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-mpc-1.3.1...   128.7 KiB   245 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-zlib-1.3....   104.4 KiB   236 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-pkgconf-1...   100.1 KiB   212 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-bzip2-1.0...    90.9 KiB   188 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libffi-3....    43.2 KiB   119 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libtre-0....    79.5 KiB   165 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-winpthrea...    41.9 KiB   119 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libwinpth...    30.2 KiB  69.5 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-termcap-1...    27.3 KiB  71.6 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-winstorec...    25.0 KiB  71.4 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libmangle...    22.8 KiB  57.4 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libsystre...     9.7 KiB  27.3 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-windows-d...     3.1 KiB  5.74 KiB/s 00:01 [###############################] 100%
 Total (43/43)                   126.3 MiB  16.3 MiB/s 00:08 [###############################] 100%
(43/43) checking keys in keyring                             [###############################] 100%
(43/43) checking package integrity                           [###############################] 100%
(43/43) loading package files                                [###############################] 100%
(43/43) checking for file conflicts                          [###############################] 100%
(43/43) checking available disk space                        [###############################] 100%
:: Processing package changes...
( 1/43) installing mingw-w64-x86_64-libwinpthread            [###############################] 100%
( 2/43) installing mingw-w64-x86_64-gcc-libs                 [###############################] 100%
( 3/43) installing mingw-w64-x86_64-libiconv                 [###############################] 100%
( 4/43) installing mingw-w64-x86_64-gettext-runtime          [###############################] 100%
( 5/43) installing mingw-w64-x86_64-zlib                     [###############################] 100%
( 6/43) installing mingw-w64-x86_64-zstd                     [###############################] 100%
( 7/43) installing mingw-w64-x86_64-binutils                 [###############################] 100%
( 8/43) installing mingw-w64-x86_64-headers-git              [###############################] 100%
( 9/43) installing mingw-w64-x86_64-crt-git                  [###############################] 100%
(10/43) installing mingw-w64-x86_64-gmp                      [###############################] 100%
(11/43) installing mingw-w64-x86_64-isl                      [###############################] 100%
(12/43) installing mingw-w64-x86_64-mpfr                     [###############################] 100%
(13/43) installing mingw-w64-x86_64-mpc                      [###############################] 100%
(14/43) installing mingw-w64-x86_64-windows-default-manifest [###############################] 100%
(15/43) installing mingw-w64-x86_64-winpthreads              [###############################] 100%
(16/43) installing mingw-w64-x86_64-gcc                      [###############################] 100%
(17/43) installing mingw-w64-x86_64-expat                    [###############################] 100%
(18/43) installing mingw-w64-x86_64-libtre                   [###############################] 100%
(19/43) installing mingw-w64-x86_64-libsystre                [###############################] 100%
(20/43) installing mingw-w64-x86_64-ncurses                  [###############################] 100%
(21/43) installing mingw-w64-x86_64-bzip2                    [###############################] 100%
(22/43) installing mingw-w64-x86_64-libffi                   [###############################] 100%
(23/43) installing mingw-w64-x86_64-mpdecimal                [###############################] 100%
(24/43) installing mingw-w64-x86_64-openssl                  [###############################] 100%
Optional dependencies for mingw-w64-x86_64-openssl
    mingw-w64-x86_64-ca-certificates
(25/43) installing mingw-w64-x86_64-termcap                  [###############################] 100%
(26/43) installing mingw-w64-x86_64-readline                 [###############################] 100%
(27/43) installing mingw-w64-x86_64-sqlite3                  [###############################] 100%
Optional dependencies for mingw-w64-x86_64-sqlite3
    mingw-w64-x86_64-tcl: for sqlite3_analyzer [pending]
(28/43) installing mingw-w64-x86_64-tcl                      [###############################] 100%
(29/43) installing mingw-w64-x86_64-tk                       [###############################] 100%
(30/43) installing mingw-w64-x86_64-xz                       [###############################] 100%
(31/43) installing mingw-w64-x86_64-tzdata                   [###############################] 100%
(32/43) installing mingw-w64-x86_64-python                   [###############################] 100%
(33/43) installing mingw-w64-x86_64-xxhash                   [###############################] 100%
(34/43) installing mingw-w64-x86_64-gdb                      [###############################] 100%
Optional dependencies for mingw-w64-x86_64-gdb
    mingw-w64-x86_64-python-pygments: for syntax highlighting
(35/43) installing mingw-w64-x86_64-gdb-multiarch            [###############################] 100%
Optional dependencies for mingw-w64-x86_64-gdb-multiarch
    mingw-w64-x86_64-python-pygments: for syntax highlighting
(36/43) installing mingw-w64-x86_64-libmangle-git            [###############################] 100%
(37/43) installing mingw-w64-x86_64-make                     [###############################] 100%
(38/43) installing mingw-w64-x86_64-pkgconf                  [###############################] 100%
(39/43) installing mingw-w64-x86_64-tools-git                [###############################] 100%
(40/43) installing mingw-w64-x86_64-winstorecompat-git       [###############################] 100%
(41/43) installing mingw-w64-x86_64-glfw                     [###############################] 100%
(42/43) installing mingw-w64-x86_64-glew                     [###############################] 100%
(43/43) installing mingw-w64-x86_64-glm                      [###############################] 100%

furcr@furcraea_built MINGW64 ~
$

完了したら GLSL 含む OpenGL プログラムのビルドが可能に

プロジェクト構成

glsl_sample/
├── CMakeLists.txt
├── main.c
├── shader.vert
└── shader.frag

🔧 main.c(OpenGLでGLSL読み込んで三角形描画)

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

// ファイル読み込みヘルパー
char* load_shader_source(const char* filepath) {
    FILE* file = fopen(filepath, "rb");
    if (!file) {
        fprintf(stderr, "Failed to open %s\n", filepath);
        exit(1);
    }
    fseek(file, 0, SEEK_END);
    long len = ftell(file);
    rewind(file);
    char* buffer = (char*)malloc(len + 1);
    fread(buffer, 1, len, file);
    buffer[len] = '\0';
    fclose(file);
    return buffer;
}

GLuint compile_shader(GLenum type, const char* source) {
    GLuint shader = glCreateShader(type);
    glShaderSource(shader, 1, &source, NULL);
    glCompileShader(shader);
    GLint success;
    glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
    if (!success) {
        char infoLog[512];
        glGetShaderInfoLog(shader, 512, NULL, infoLog);
        fprintf(stderr, "Shader compile error: %s\n", infoLog);
        exit(1);
    }
    return shader;
}

int main() {
    if (!glfwInit()) {
        fprintf(stderr, "GLFW init failed\n");
        return -1;
    }

    GLFWwindow* window = glfwCreateWindow(800, 600, "GLSL Sample", NULL, NULL);
    if (!window) {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glewInit();

    char* vertexSource = load_shader_source("../shader.vert");
    char* fragmentSource = load_shader_source("../shader.frag");

    GLuint vertexShader = compile_shader(GL_VERTEX_SHADER, vertexSource);
    GLuint fragmentShader = compile_shader(GL_FRAGMENT_SHADER, fragmentSource);

    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);
    glUseProgram(shaderProgram);

    float vertices[] = {
        -0.5f, -0.5f, 0.0f,
         0.5f, -0.5f, 0.0f,
         0.0f,  0.5f, 0.0f
    };
    GLuint VBO, VAO;
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    
    glBindVertexArray(VAO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    while (!glfwWindowShouldClose(window)) {
        glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        glUseProgram(shaderProgram);
        glBindVertexArray(VAO);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
    glfwTerminate();
    return 0;
}

🧬 shader.vert(頂点シェーダー)

#version 330 core
layout(location = 0) in vec3 aPos;
void main() {
    gl_Position = vec4(aPos, 1.0);
}

🎨 shader.frag(フラグメントシェーダー)

#version 330 core
out vec4 FragColor;
void main() {
    FragColor = vec4(1.0, 0.2, 0.2, 1.0); // 赤
}

🛠 CMakeLists.txt(ビルド設定)

cmake_minimum_required(VERSION 3.5)
project(glsl_sample)

set(CMAKE_C_STANDARD 99)

add_executable(glsl_sample main.c)

find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIRS})

# MSYS2パス用のヒント(MINGW64環境)
include_directories("C:/msys64/mingw64/include")
link_directories("C:/msys64/mingw64/lib")

target_link_libraries(glsl_sample glfw3 glew32 opengl32 gdi32)

🔧 ビルド手順(MSYS2 MINGW64 シェル)

cd /path/to/glsl_sample
mkdir build
cd build
cmake ..
make
./glsl_sample.exe

📌 備考

  • 画面に赤い三角形が表示されれば成功です。
  • GLSLシェーダーは外部ファイルから読み込んで動的にコンパイルしています。
  • shader.vertshader.frag を編集すればリアルタイムに変更反映できます。

-bash: cmake: command not found

ChatGPT said:

それは cmake がインストールされていないエラーです。
MSYS2のMINGW64環境では、以下のコマンドで cmake をインストールできます。


✅ cmake のインストール(MSYS2 MINGW64)

pacman -S mingw-w64-x86_64-cmake

必ず MSYS2の「MINGW64」シェル で実行してください(/mingw64/bin がPATHに入っている状態)

furcr@furcraea_built MINGW64 ~
$ pacman -S mingw-w64-x86_64-cmake
resolving dependencies...
looking for conflicting packages...

Packages (24) mingw-w64-x86_64-brotli-1.1.0-5  mingw-w64-x86_64-c-ares-1.34.5-1
              mingw-w64-x86_64-ca-certificates-20241223-1  mingw-w64-x86_64-cppdap-1.65-1
              mingw-w64-x86_64-curl-8.14.1-1  mingw-w64-x86_64-gnutls-3.8.9-4
              mingw-w64-x86_64-jsoncpp-1.9.6-3  mingw-w64-x86_64-libarchive-3.8.1-2
              mingw-w64-x86_64-libb2-0.98.1-2  mingw-w64-x86_64-libidn2-2.3.8-2
              mingw-w64-x86_64-libpsl-0.21.5-3  mingw-w64-x86_64-libssh2-1.11.1-1
              mingw-w64-x86_64-libtasn1-4.20.0-1  mingw-w64-x86_64-libunistring-1.3-1
              mingw-w64-x86_64-libuv-1.51.0-1  mingw-w64-x86_64-lz4-1.10.0-1
              mingw-w64-x86_64-nettle-3.10.2-1  mingw-w64-x86_64-nghttp2-1.66.0-1
              mingw-w64-x86_64-nghttp3-1.10.1-1  mingw-w64-x86_64-ngtcp2-1.13.0-2
              mingw-w64-x86_64-ninja-1.13.0-1  mingw-w64-x86_64-p11-kit-0.25.5-1
              mingw-w64-x86_64-rhash-1.4.5-1  mingw-w64-x86_64-cmake-4.0.3-1

Total Download Size:    19.46 MiB
Total Installed Size:  106.07 MiB

:: Proceed with installation? [Y/n] Enter

:: Retrieving packages...
 mingw-w64-x86_64-gnutls-3....     2.2 MiB  1013 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-curl-8.14...  1552.7 KiB   666 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-libarchiv...   876.9 KiB   374 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-libunistr...   832.7 KiB   349 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-cmake-4.0...     9.2 MiB  3.44 MiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-cppdap-1....   491.9 KiB  1152 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-nettle-3....   563.7 KiB  1112 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-brotli-1....   420.5 KiB   947 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-ca-certif...   395.0 KiB   884 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-c-ares-1....   309.2 KiB   671 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libssh2-1...   309.0 KiB   719 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-ngtcp2-1....   269.4 KiB   622 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libuv-1.5...   221.5 KiB   480 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libtasn1-...   196.3 KiB   458 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-nghttp2-1...   194.9 KiB   435 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-p11-kit-0...   422.7 KiB   245 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-rhash-1.4...   219.0 KiB   301 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-ninja-1.1...   186.3 KiB   350 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-jsoncpp-1...   176.1 KiB   387 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libidn2-2...   170.6 KiB   377 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-lz4-1.10....   166.9 KiB   328 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-nghttp3-1...   124.7 KiB   295 KiB/s 00:00 [###############################] 100%
 mingw-w64-x86_64-libpsl-0....    94.4 KiB   181 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-libb2-0.9...    23.7 KiB  53.5 KiB/s 00:00 [###############################] 100%
 Total (24/24)                    19.5 MiB  3.73 MiB/s 00:05 [###############################] 100%
(24/24) checking keys in keyring                             [###############################] 100%
(24/24) checking package integrity                           [###############################] 100%
(24/24) loading package files                                [###############################] 100%
(24/24) checking for file conflicts                          [###############################] 100%
(24/24) checking available disk space                        [###############################] 100%
:: Processing package changes...
( 1/24) installing mingw-w64-x86_64-cppdap                   [###############################] 100%
( 2/24) installing mingw-w64-x86_64-c-ares                   [###############################] 100%
( 3/24) installing mingw-w64-x86_64-brotli                   [###############################] 100%
( 4/24) installing mingw-w64-x86_64-libunistring             [###############################] 100%
( 5/24) installing mingw-w64-x86_64-libidn2                  [###############################] 100%
( 6/24) installing mingw-w64-x86_64-libpsl                   [###############################] 100%
( 7/24) installing mingw-w64-x86_64-libtasn1                 [###############################] 100%
( 8/24) installing mingw-w64-x86_64-p11-kit                  [###############################] 100%
( 9/24) installing mingw-w64-x86_64-ca-certificates          [###############################] 100%
(10/24) installing mingw-w64-x86_64-libssh2                  [###############################] 100%
(11/24) installing mingw-w64-x86_64-nghttp2                  [###############################] 100%
(12/24) installing mingw-w64-x86_64-nettle                   [###############################] 100%
(13/24) installing mingw-w64-x86_64-gnutls                   [###############################] 100%
(14/24) installing mingw-w64-x86_64-ngtcp2                   [###############################] 100%
(15/24) installing mingw-w64-x86_64-nghttp3                  [###############################] 100%
(16/24) installing mingw-w64-x86_64-curl                     [###############################] 100%
(17/24) installing mingw-w64-x86_64-jsoncpp                  [###############################] 100%
(18/24) installing mingw-w64-x86_64-libb2                    [###############################] 100%
(19/24) installing mingw-w64-x86_64-lz4                      [###############################] 100%
(20/24) installing mingw-w64-x86_64-libarchive               [###############################] 100%
(21/24) installing mingw-w64-x86_64-libuv                    [###############################] 100%
(22/24) installing mingw-w64-x86_64-ninja                    [###############################] 100%
(23/24) installing mingw-w64-x86_64-rhash                    [###############################] 100%
(24/24) installing mingw-w64-x86_64-cmake                    [###############################] 100%
Optional dependencies for mingw-w64-x86_64-cmake
    mingw-w64-x86_64-emacs: for cmake emacs mode

furcr@furcraea_built MINGW64 ~
$

✅ インストール確認

which cmake

$ which cmake
/mingw64/bin/cmake

これで /mingw64/bin/cmake と表示されれば OK。あとは前の手順どおり cmake .. && make でビルドできます。


furcr@furcraea_built MINGW64 ~
$ cd C:\glsl_sample

furcr@furcraea_built MINGW64 /c/glsl_sample
$ cd build

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ cmake ..
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.5 has been removed from CMake.

  Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
  to tell CMake that the project requires at least <min> but has been updated
  to work with policies introduced by <max> or earlier.

  Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.


-- Configuring incomplete, errors occurred!

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$

完璧です、CMakeはちゃんと動いています
出ているエラーは単に CMakeLists.txt のバージョン指定が古いというだけなので、すぐに修正できます。


✅ 修正方法:CMakeLists.txt の1行目を更新

🔧 変更前:

cmake_minimum_required(VERSION 3.0)

✅ 変更後

cmake_minimum_required(VERSION 3.5)

または、より安全にするならこうしてもOKです:

cmake_minimum_required(VERSION 3.5...3.27)

これは「3.5以上〜3.27以下で対応」と明記する形です(今のMSYS2ではだいたい3.27〜3.29あたりが入ります)。

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ make
-bash: make: command not found

なので

🧩 補足:make がないとき

pacman -S make
furcr@furcraea_built MINGW64 ~
$ pacman -S make
resolving dependencies...
looking for conflicting packages...

Packages (1) make-4.4.1-2

Total Download Size:   0.50 MiB
Total Installed Size:  1.61 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
 make-4.4.1-2-x86_64             507.6 KiB   320 KiB/s 00:02 [###############################] 100%
(1/1) checking keys in keyring                               [###############################] 100%
(1/1) checking package integrity                             [###############################] 100%
(1/1) loading package files                                  [###############################] 100%
(1/1) checking for file conflicts                            [###############################] 100%
(1/1) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/1) installing make                                        [###############################] 100%
:: Running post-transaction hooks...
(1/1) Updating the info directory file...

furcr@furcraea_built MINGW64 ~
$

または MINGW版を使うなら:

pacman -S mingw-w64-x86_64-make

furcr@furcraea_built MINGW64 ~
$ pacman -S mingw-w64-x86_64-make
warning: mingw-w64-x86_64-make-4.4.1-3 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (1) mingw-w64-x86_64-make-4.4.1-3

Total Installed Size:  0.29 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n]
(1/1) checking keys in keyring                               [###############################] 100%
(1/1) checking package integrity                             [###############################] 100%
(1/1) loading package files                                  [###############################] 100%
(1/1) checking for file conflicts                            [###############################] 100%
(1/1) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/1) reinstalling mingw-w64-x86_64-make                     [###############################] 100%

furcr@furcraea_built MINGW64 ~
$

その場合、呼び出しは mingw32-make になるかもしれません。

対処法:明示的に Makefile を出させる

🔁 ビルドフォルダをクリア

まず、前回のビルドキャッシュを消します:

cd ..
rm -rf build
mkdir build
cd build

✅ CMakeを正しく実行(MSYS Makefiles 指定)

cmake -G "MSYS Makefiles" ..
furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ cmake -G "MSYS Makefiles" ..
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.10 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
  to tell CMake that the project requires at least <min> but has been updated
  to work with policies introduced by <max> or earlier.


-- The C compiler identification is GNU 15.1.0
-- The CXX compiler identification is GNU 15.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: opengl32
-- Configuring done (1.2s)
-- Generating done (0.0s)
-- Build files have been written to: C:/glsl_sample/build

これで Makefile がちゃんと生成されるはずです。

📌 補足:-G オプションとは?

CMakeはデフォルトで “NMake” や “Visual Studio” 用のプロジェクトファイルを生成することがあります。
MSYS2で make を使いたい場合は、必ず -G "MSYS Makefiles" を指定しないと Makefile が生成されません。

🔨 再度ビルド

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ make
[ 50%] Building C object CMakeFiles/glsl_sample.dir/main.c.obj
[100%] Linking C executable glsl_sample.exe
[100%] Built target glsl_sample

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$

🧪 もしそれでもだめなら

最終手段として、以下で手動ビルドできます:

gcc ../main.c -o glsl_sample.exe -lglfw3 -lglew32 -lopengl32 -lgdi32

✅ 次にやること:実行!

cd ..
./glsl_sample.exe

✅ やり直し

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ cd ..

furcr@furcraea_built MINGW64 /c/glsl_sample
$ rm -rf build

furcr@furcraea_built MINGW64 /c/glsl_sample
$ mkdir build

furcr@furcraea_built MINGW64 /c/glsl_sample
$ cd build

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ cmake -G "MSYS Makefiles" ..
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.10 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
  to tell CMake that the project requires at least <min> but has been updated
  to work with policies introduced by <max> or earlier.


-- The C compiler identification is GNU 15.1.0
-- The CXX compiler identification is GNU 15.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: opengl32
-- Configuring done (1.2s)
-- Generating done (0.0s)
-- Build files have been written to: C:/glsl_sample/build

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ make
[ 50%] Building C object CMakeFiles/glsl_sample.dir/main.c.obj
[100%] Linking C executable glsl_sample.exe
[100%] Built target glsl_sample

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$ ./glsl_sample.exe
Failed to open shader.vert

furcr@furcraea_built MINGW64 /c/glsl_sample/build
$

できたああああああ

[C++]やさしいC++ プログラムをクラスで部品化する ちゃんと class という文字でクラス宣言できる。シンプルでOK

CarClass.cpp

#include <iostream>
using  namespace std;

//Carクラスの宣言
class Car{
	private:
		int num;
		double gas;

	public:
		Car();
		void  show();

};

//Car Class Member関数の定義 コンストラクタ
Car::Car()
{
	num=0;
	gas=0.0;
	cout << "車を作成しました \n";

}
//Car Class Member関数の定義 メソッド
void Car::show()
{
	cout << "車のナンバーは" << num << "です。\n";
	cout << "gasは" << gas << "です。\n";
}
//Car インスタンスの生成
int main(){
	Car car1;
	car1.show();
	return 0;
};

cd_samples5_6_class.cmd


C:\samples\chapter05\CarClass>cd C:\samples\chapter05\CarClass\

C:\samples\chapter05\CarClass>g++ CarClass.cpp -o CarClass.exe

C:\samples\chapter05\CarClass>CarClass.exe
車を作成しました
車のナンバーは0です。
gasは0です。

C:\samples\chapter05\CarClass>cmd /k
C:\samples\chapter05\CarClass>





[C++]スラスラわかるC++ プログラムをクラスで部品化する

HealthChecker.cpp

#include <iostream>
#include <string>
using namespace std;
#include "HealthChecker.h"

// 標準BMIを表すメンバ定数の実体
const int HealthChecker::STD_BMI = 22;

// BMIを返すメンバ関数の実装
double HealthChecker::getBmi() {
  // まだBMIが計算されていなかったら計算する
  if (this->bmi == 0) {
    double mHeight = this->height / 100;
    this->bmi = this->weight / mHeight / mHeight;
  }

  // BMIを返す
  return this->bmi;
}

// コンストラクタの実装
HealthChecker::HealthChecker(string name, double height, double weight) {
  // メンバ変数に初期値を設定する
  this->name = name;
  this->height = height;
  this->weight = weight;
  this->bmi = 0;
}

// 氏名を返すメンバ関数の実装
string HealthChecker::getName() {
  return this->name;
}

// 標準BMIを返すメンバ関数の実装
int HealthChecker::getStdBmi() {
  return HealthChecker::STD_BMI;
}

// 標準体重を返すメンバ関数の実装
double HealthChecker::getStdWeight() {
  double mHeight = this->height / 100;
  return HealthChecker::STD_BMI * mHeight * mHeight;
}

HealthChecker.h

class HealthChecker {
  private:
    static const int STD_BMI;		// 標準BMIを表すメンバ定数
    string name;			// 氏名を格納するメンバ変数
    double height;			// 身長を格納するメンバ変数
    double weight;			// 体重を格納するメンバ変数
    double bmi;				// BMIを格納するメンバ変数
  public:
    static int getStdBmi();		// 標準BMIを返すメンバ関数
    double getStdWeight();		// 標準体重を返すメンバ関数
    double getBmi();			// BMIを返すメンバ関数
    string getName();			// 氏名を返すメンバ関数
    HealthChecker(string name, double height, double weight); // コンストラクタ
};

list5_6.cpp

#include <iostream>
#include <string>
using namespace std;
#include "HealthChecker.h"

int main() {
  // HealthCheckerクラスのインスタンスを生成する
  HealthChecker yamada("山田一郎", 170, 67.5);

  // BMIの値を表示する
  cout << "BMIは、" << yamada.getBmi() << "です。" << endl;

  return 0;
}

cd_samples5_6_class.cmd


C:\samples\chapter05>cd C:\samples\chapter05\

C:\samples\chapter05>g++ list5_6.cpp HealthChecker.cpp -o list5_6.exe

C:\samples\chapter05>list5_6.exe
BMIは、23.3564です。

C:\samples\chapter05>cmd /k
C:\samples\chapter05>

[C++]スラスラわかるC++ stringをインクルードすればほかの言語並みに文字列は扱えるようにも見える。(print無いしウソ)

list5_3.cpp

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

void printStr(string a){
   cout << a << endl;
};

int main() {
  // 文字列オブジェクト
  string s1, s2, s3;

  // 文字列オブジェクトに文字列を格納する
  s1 = "apple";
  s2 = "banana";

  // 文字列を比較する
  if (s1 > s2) {
    cout << "大きい。" << endl;
  }
  else if (s1 < s2) {
    cout << "小さい。" << endl;
  }
  else {
    cout << "等しい。" << endl;
  }

  // 文字列を連結する
  s3 = s1 + s2;
  cout << s3 << endl;

  //printf  ではこう使いにくい。
  printf("%s\n",s3.c_str());
  //printf  ではこう使いやすい。
  printStr(s3);

  // 長さを求める
  cout << s3.length() << endl;

  // 5番目から3文字の部分文字列を取り出す
  cout << s3.substr(5, 3) << endl;

  // 5文字目だけを取り出す
  cout << s3[5] << endl;

  // "na" という文字列を見つける
  cout << s3.find("na") << endl;
  
  // 文字列を空にする
  s3.clear();

  // 文字列が空であることを確認する
  if (s3.empty()) {
    cout << "空です。" << endl;
  }
  else {
    cout << "空ではありません。" << endl;
  }

  return 0;
}

cd_samples5_3.cmd


C:\samples\chapter05>cd C:\samples\chapter05\

C:\samples\chapter05>g++ -o list5_3.exe list5_3.cpp

C:\samples\chapter05>list5_3.exe
小さい。
applebanana
applebanana
applebanana
11
ban
b
7
空です。

C:\samples\chapter05>cmd /k
C:\samples\chapter05>

[C++]スラスラわかるC++ 「C++の仕様で配列は必ずのポインタ渡しになる」を知るための実験プログラム 4_12 cpp *ptr &address

chapter4.h


// 配列の平均値を返す関数のプロトタイプ宣言
double getAverage(const int *a, int length);

getAverage.cpp

double getAverage(const int *a, int length) {
  double sum;		// 合計値
  double average;	// 平均値
  int i;		// 配列の要素番号(ループカウンタ)

  // 配列の合計値を求める
  sum = 0;
  for (i = 0; i < length; i++) {
    // ポインタが指し示している要素の値を読み出し集計する
    sum += *a;

    // ポインタを更新する(次の要素を指し示す)
    a++;
  }

  // 配列の平均値を求める
  average = (double)sum / length;

  // 配列の合計値を返す
  return average;
}

list4_12.cpp

#include <iostream>
using namespace std;
#include "chapter4.h"

int main() {
  const int DATA_NUM = 10;	// 配列の要素数

  // 10人の学生のテストの得点を格納した配列
  int point[DATA_NUM] = { 85, 72, 63, 45, 100, 98, 52, 88, 74, 65 };
  double average;		// 平均値

  // 平均点を求める
  average = getAverage(point, DATA_NUM);

  // 平均点を表示する
  cout << "平均点:" << average << endl;

  return 0;
}

cd_samples4_12_pointer_address.cmd  

 g++ list4_12.cpp getAverage.cpp -o list4_12.exe


C:\samples\chapter04\4_12>cd C:\samples\chapter04\4_12\

C:\samples\chapter04\4_12>g++ list4_12.cpp getAverage.cpp -o list4_12.exe

C:\samples\chapter04\4_12>list4_12.exe
平均点:74.2

C:\samples\chapter04\4_12>cmd /k
C:\samples\chapter04\4_12>

[C++]スラスラわかるC++ 引数のポインタ渡しを知るための実験プログラム 4_9 cpp *ptr &address

list4_9.cpp

#include <iostream>
using namespace std;

// 引数をポインタ渡しで受け取る関数
void sub(int *ptr) {
  // 引数に渡されたアドレスを表示する
  cout << "sub関数:引数ptrに渡されたアドレス = " << ptr << endl;

  // 引数に渡されたアドレスが指し示す変数の値を読み出して表示する
  cout << "sub関数:引数ptrが指し示す変数の値 = " << *ptr << endl;

  // 引数に渡されたアドレスが指し示す変数に値を書き込む
  *ptr = 456;
  cout << "sub関数:引数ptrが指し示す変数に書き込んだ値 = " << *ptr << endl;

  // 戻り値を返さずに関数を終了する
  return;
}

// main関数
int main() {
  // ローカル変数を宣言し、値を書き込む
  int val = 123;

  // ローカル変数のアドレスを表示する
  cout << "main関数:変数valのアドレス = " << &val << endl;

  // ローカル変数の値を表示する
  cout << "main関数:変数valの値 = " << val << endl;

  // 引数のポインタ渡しで、sub関数を呼び出す
  sub(&val);

  // ローカル変数の値を表示する
  cout << "main関数:変数valの値 = " << val << endl;

  return 0;
}

cd_samples4_9_pointer_address.cmd


C:\samples\chapter04>cd C:\samples\chapter04\

C:\samples\chapter04>g++ -o list4_9.exe list4_9.cpp

C:\samples\chapter04>list4_9.exe
main関数:変数valのアドレス = 0x61ff0c
main関数:変数valの値 = 123
sub関数:引数ptrに渡されたアドレス = 0x61ff0c
sub関数:引数ptrが指し示す変数の値 = 123
sub関数:引数ptrが指し示す変数に書き込んだ値 = 456
main関数:変数valの値 = 456

C:\samples\chapter04>cmd /k
C:\samples\chapter04>

[C++]スラスラわかるC++ テキストファイルを読み込むプログラム 9_5 cpp ifstream fin

list9_6.cpp

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
  string s;

  // 入力用のテキストファイルをオープンする
  ifstream fin("myFile.txt");

  // ファイルがオープンできたかどうかチェックする
  if (!fin.is_open()==true) {
    // エラー処理
    cout << "ファイルをオープンできません!";

    // プログラムをエラー終了する
    return 1;
  }

 // ファイルから1行ずつ読み出す
  while (getline(fin, s)) {
    // 読み出した1行を画面に表示する
    cout << s << endl;
  }
    
  // ファイルをクローズする
  fin.close();

  // プログラムを正常終了する
  return 0;
}

myFile.txt  エンコードは1 ANSI じゃなきゃだめだとおもう やってない

C++ hello, world
C++の皆さん、こんにちは

cd_samples9_5_ofstream_file_output.cmd


C:\samples\chapter09>cd C:\samples\chapter09\

C:\samples\chapter09>g++ -o list9_6.exe list9_6.cpp

C:\samples\chapter09>list9_6.exe
C++ hello, world
C++の皆さん、こんにちは

C:\samples\chapter09>cmd /k
C:\samples\chapter09>

[C++]スラスラわかるC++ テキストファイルへ書き込むプログラム 9_5 cpp ofstream fout

list9_5.cpp

#include <iostream>
#include <fstream>
using namespace std;

int main() {
  // 出力用のテキストファイルをオープンする
  ofstream fout("myFile.txt");

  // ファイルがオープンできたかどうかチェックする
  if (!fout.is_open()==true) {
    // エラー処理
    cout << "ファイルをオープンできません!";

    // プログラムをエラー終了する
    return 1;
  }

  // ファイルに文字列を書き込む
  fout << "C++ hello, world" << endl;
  fout << "C++の皆さん、こんにちは" << endl;
    
  // ファイルをクローズする
  fout.close();
  cout << "ファイルに書き込みました!";

  // プログラムを正常終了する
  return 0;
}

cd_samples9_5_ofstream.cmd


C:\samples\chapter09>cd C:\samples\chapter09\

C:\samples\chapter09>g++ -o list9_5.exe list9_5.cpp

C:\samples\chapter09>list9_5.exe
ファイルに書き込みました!
C:\samples\chapter09>cmd /k
C:\samples\chapter09>

myFile.txt

C++ hello, world
C++の皆さん、こんにちは

[C++]スラスラわかるC++ 関数テンプレート 10_2 cpp function Template Standard Template Library (STL)

■関数テンプレート(Tはプレースホルダ)
template <Class T>T 関数名(T 引数名,T 引数名){
        Tをデータ型とした変数を使った処理;
}

list10_2.cpp

#include <iostream>
using namespace std;

// 関数テンプレートで定義したgetMin関数
//template <Class T>T 関数名(T 引数名,T 引数名){
template <class T> T getMin(T a, T b) {
  //return a < b ? a : b;
    if (a < b) {
        return a;
    } else {
        return b;
    }
}

// main関数
int main() {
  // int型のgetMin関数を呼び出す
  int a, b, c;
  a = 123;
  b = 456;
  c = getMin(a, b);
  cout << c << endl;

  // double型のgetMin関数を呼び出す
  double x, y, z;
  x = 1.23;
  y = 4.56;
  z = getMin(x, y);
  cout << z << endl;

  return 0;
}

cd_samples10_2_template.cmd


C:\samples\chapter10>cd C:\samples\chapter10\

C:\samples\chapter10>g++ -o list10_3.exe list10_3.cpp

C:\samples\chapter10>list10_3.exe
123
1.23
a
1.11

C:\samples\chapter10>cmd /k
C:\samples\chapter10>