コンパイル用shell script C版(clangとgcc)とC++(37) 版(clang++とg++)

C言語を習得する３つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b

C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1

# コンパイル用shell scriptを記述する。
ここではCERT Cの例題を編纂(compile)・実行する方法を検討する。shell scriptのデバッグは苦手。なるべく簡単な機能だけ使う。

最終的にはmakeを作るかもしれない。makeのデバッグはもっと苦手。全部が完成したら作成予定。

引数に関する考察

１コンパイル対象ファイル
1.1 C用 .cを付加
1.2 c++用 .cppを付加

２　複数ファイルのコンパイル
2.1 ２つファイル用
2.2 ３つファイル用

３　コンパイルオプションの指定
ファイル名の後に、コンパイルオプションを記述

４　実行時のオプションの記述
最後の引数は実行時に用いる

まずは、下記に掲載するプログラム用。

CERT C入門(1) Rule 01. Preprocessor (PRE)
https://qiita.com/kaizen_nagoya/items/8d2cb4158ed53d5a0a28

C言語の断片を、できれば実行結果で何か出力する処理を入れる。
　コンパイルに意味があるかどうかを確かめる。
　　（意味のない処理がどういう記述であってもどうでもいい。）
　副作用の有無を確かめるには出力するのが一番。
　　（出力しようとしなければ副作用が生じないこともある。）
　実行結果に違いがあるかどうかを確かめる。
　　（コンパイラによって違うがあるような出力を試す。）

これまでに類似の作業は、「C Puzzle Book」「国際規格C、C++」「MISRA C/MISRA C++」で行ってきた。

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

[C][C++]の国際規格案の例題をコンパイルするときの課題７つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

MISRA C まとめ #include <misra_c.h>
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

# Cコンパイル

```shell:cert0.sh
cc pre01n.c
./a.out
```

## 実行可能に
```shell
$ chmod +x cert0.sh
```
+xで実行権を付与。数字を打つより間違いが少ない。

初心者向けシェルスクリプトの基本コマンドの紹介
https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337

## 実行

```shell
$ ./cert0.sh
$ 3 3
````
コンパイルして実行する

# 引数
引数を渡す

```shell:cert1.sh
cc $1
./a.out
```

## 引数渡し実行

```shell
$ cert1 pre1n.c
$ 3 3
```

# 複数のコンパイラを使う

```shell:cert1.sh
cc $1
./a.out
gcc-6 $1
./a.out
```
課題、２つ目のコンパイルを失敗すると、１つ目をまた実行してしまう。誤解する可能性あり。

```shell
$ cert1 pre1n.c
$ 3 3
$ 3 3
```

## 実行結果を削除する

```shell:cert1.sh
cc $1
./a.out
rm a.out
gcc-6 $1
./a.out
rm a.out
```

## 事前の実行結果を削除
１つ目のコンパイルを失敗した場合、何かの結果を実行してしまう。

```shell:cert1.sh
rm a.out
cc $1
./a.out
rm a.out
gcc-6 $1
./a.out
rm a.out
```

# 実行ファイルを残す

```shell:cert2.sh
cc $1.c -o $1l
./$1l
gcc-6 $1.c -o $1g
./$1g
```
".c"の入力を省略できるようにした。

すごくスッキリした。

実行すると

```shell
$ cert2 pre1n
$ 3 3
$ 3 3
```
どちらがどちらの実行結果が間違えるといけない。

# 処理内容表示

```shell:cert2.sh
echo "clang/llvm $1.c"
cc $1.c -o $1l
./$1l
gcc-6 $1.c -o $1g
./$1g
```

実行して見ると

```shell
$ cert2 pre1n
clang/llvm pre32n.c
3 3
gcc-6 pre32n.c
3 3
```

１日目のシェルスクリプト作りはこの辺まで。
のつもりでいたら、certc側で、第二引数を渡す必要があるプログラムがあり、書き換え。コンパイルエラー時には実行しないように追記。

```certc3.sh
#!/bin/sh
echo "$ clang $1.c"
cc $1.c -o $1l
if [  -e $1l ]; then
./$1l $2
fi
echo "\r"
echo "$ gcc-6 $1.c"
gcc-6 $1.c -o $1g
if [  -e $1g ]; then
./$1g $2
fi
```
## gcc-7対応

```clg7.sh
#!/bin/sh
echo "$ clang $1.cpp"
cc $1.c -o $1l -I.
if [  -e $1l ]; then
./$1l $2
fi
echo "\r"
echo "$ gcc-7 $1.cpp"
gcc-7 $1.c -o $1g -I.
if [  -e $1g ]; then
./$1g $2
fi
```

### gcc-7対応コンパイル対象が２つある場合

```clg72.sh
#!/bin/sh
echo "$ clang $1.c"
cc $1.c $2.c -o $1l -I.
if [  -e $1l ]; then
./$1l $3
fi
echo "\r"
echo "$ gcc-7 $1.c"
gcc-7 $1.c $2.c -o $1g -I.
if [  -e $1l ]; then
./$1l $3
fi
```
### gcc-7対応コンパイル対象が３つある場合

```clg73.sh
#!/bin/sh
echo "$ clang $1.c"
cc $1.c $2.c $3.c -o $1l -I.
if [  -e $1l ]; then
./$1l $4
fi
echo "\r"
echo "$ gcc-7 $1.c"
gcc-7 $1.c $2.c $3.c -o $1g -I.
if [  -e $1g ]; then
./$1g $4
fi
```

# C++用作成

```certcpp.sh
#!/bin/sh
echo "$ clang++ $1.cpp"
clang++ $1.cpp -o $1l
if [  -e $1l ]; then
./$1l $2
fi
echo "\r"
echo "$ g++-6 $1.cpp"
g++-6 $1.cpp -o $1g
if [  -e $1g ]; then
./$1g $2
fi
```
## g++-7対応

```cppgl.sh
#!/bin/sh
echo "$ clang++ $1.cpp"
clang++ $1.cpp  -o $1l
if [  -e $1l ]; then
./$1l $2
fi
echo "\r"
echo "$ g++-7 $1.cpp"
g++-7 $1.cpp -o $1g
if [  -e $1g ]; then
./$1g $2
fi
```

## -std=c++17 追記

```cppgl17.sh
#!/bin/sh
echo "$ clang++ $1.cpp"
clang++ $1.cpp  -std=c++17  -o $1l
if [  -e $1l ]; then
./$1l $2
fi
echo "\r"
echo "$ g++-7 $1.cpp"
g++-7 $1.cpp -std=c++17  -o $1g
if [  -e $1g ]; then
./$1g $2
fi
```
-Wallをつけた。一通りコンパイルしてみた。改良点を探すために-Wallの警告を順次確認。

```sh:cppwa17.sh
#!/bin/sh
echo "$ clang++ $1.cpp -std=c++17 -Wall"
clang++ $1.cpp -std=c++17 -Wall -o $1l
if [  -e $1l ]; then
./$1l $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++17  -Wall" 
g++-7 $1.cpp  -std=c++17 -Wall -o $1g
if [  -e $1g ]; then
./$1g $2
fi
```
# -trigraph用にコンパイルオプションを記述できるようにした版(c++2011用）

```sh:cppwa11.sh
#!/bin/sh
echo " usege ./cppwa11.sh prog option msg"
echo "$ clang++ $1.cpp $2 -std=c++11 -Wall"
clang++ $1.cpp -std=c++11 $2  -Wall -o $1l
if [  -e $1l ]; then
./$1l $3
fi
echo "\r"
echo "$ g++-7 $1.cpp $2 -std=c++11  -Wall" 
g++-7 $1.cpp  -std=c++11 $2 -Wall -o $1g
if [  -e $1g ]; then
./$1g $3
fi
```

## C++N4910用に　-std=C++2b 版作成

```bash:clgc.sh
#!/bin/sh
if [  -e $1l ]; then
rm $1l
fi
if [  -e $1g ]; then
rm $1g
fi
echo "$ clang++ $1.cpp -std=03 -o $1l -I. -Wall" 
clang++ $1.cpp -std=c++03 -o $1l -I. -Wall
if [  -e $1l ]; then
./$1l 
fi
if [  -e $1l ]; then
rm $1l
fi
echo "$ clang++ $1.cpp -std=2b -o $1l -I. -Wall"
clang++ $1.cpp -std=c++2b -o $1l -I. -Wall
if [  -e $1l ]; then
./$1l
fi
echo "\r"
echo "$ g++ $1.cpp -std=03 -o $1g -I. -Wall"
g++ $1.cpp -std=c++03 -o $1g -I. -Wall
if [ -e $1g ]; then
./$1g
fi
if [ -e $1g ]; then
rm $1g
fi
echo "\r"
echo "$ g++ $1.cpp -std=2b -o $1g -I. -Wall"
g++ $1.cpp -std=c++2b -o $1g -I. -Wall
if [ -e $1g ]; then
./$1g 
fi
```

### 利用方法

```shell-session
./cppwa11 cpp2011-2-4 -trigraph
```

```sh:cppall.sh
#!/bin/sh
echo "$ clang++ $1.cpp -std=c++03 -Wall"
clang++ $1.cpp -std=c++03 -Wall -o $1l03
if [  -e $1l03 ]; then
./$1l03 $2
fi
echo "$ clang++ $1.cpp -std=c++11 -Wall"
clang++ $1.cpp -std=c++11 -Wall -o $1l11
if [  -e $1l11 ]; then
./$1l11 $2
fi
echo "$ clang++ $1.cpp -std=c++17 -Wall"
clang++ $1.cpp -std=c++17 -Wall -o $1l17
if [  -e $1l17 ]; then
./$1l17 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++03  -Wall"
g++-7 $1.cpp  -std=c++03 -Wall -o $1g03
if [  -e $1g03 ]; then
./$1g03 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++11  -Wall"
g++-7 $1.cpp  -std=c++11 -Wall -o $1g11
if [  -e $1g11 ]; then
./$1g11 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++17  -Wall" 
g++-7 $1.cpp  -std=c++17 -Wall -o $1g17
if [  -e $1g17 ]; then
./$1g17 $2
fi
```
## docker用に追記

```shell-session:cppall.sh
#!/bin/sh
echo "$ clang++ $1.cpp -std=c++03 -Wall"
clang++ $1.cpp -std=c++03 -lc++ -I/usr/local/include/c++/7.3.0 -I/usr/local/include/c++/7.3.0/x86_64-linux-gnu -Wall -o $1l03
if [  -e $1l03 ]; then
	./$1l03 $2
fi
echo "$ clang++ $1.cpp -lc++ -std=c++11  -Wall"
clang++ $1.cpp -std=c++11 -lc++ -I/usr/local/include/c++/7.3.0 -I/usr/local/include/c++/7.3.0/x86_64-linux-gnu -Wall -o $1l11
if [  -e $1l11 ]; then
	./$1l11 $2
fi
echo "$ clang++ $1.cpp -lc++ -std=c++17  -Wall"
clang++ $1.cpp -std=c++17 -lc++ -I/usr/local/include/c++/7.3.0 -I/usr/local/include/c++/7.3.0/x86_64-linux-gnu -Wall -o $1l17
if [  -e $1l17 ]; then
	./$1l17 $2
fi
echo "\r"
echo "$ g++ $1.cpp -std=c++03  -Wall"
g++ $1.cpp  -std=c++03 -Wall -o $1g03
if [  -e $1g03 ]; then
	./$1g03 $2
fi
echo "\r"
echo "$ g++ $1.cpp -std=c++11  -Wall"
g++ $1.cpp  -std=c++11 -Wall -o $1g11
if [  -e $1g11 ]; then
	./$1g11 $2
fi
echo "\r"
echo "$ g++ $1.cpp -std=c++17  -Wall" 
g++ $1.cpp  -std=c++17 -Wall -o $1g17
if [  -e $1g17 ]; then
	./$1g17 $2
fi
```
### -std=c++14を追加した版

```shell:cppall.sh
#!/bin/sh
echo "$ clang++ $1.cpp -std=c++03 -Wall"
clang++ $1.cpp -std=c++03 -I=. -Wall -o $1l03
if [  -e $1l03 ]; then
./$1l03 $2
fi
echo "$ clang++ $1.cpp -std=c++11 -Wall"
clang++ $1.cpp -std=c++11 -I=. -Wall -o $1l11
if [  -e $1l11 ]; then
./$1l11 $2
fi
echo "$ clang++ $1.cpp -std=c++14 -Wall"
clang++ $1.cpp -std=c++14 -I=. -Wall -o $1l14
if [  -e $1l14 ]; then
./$1l14 $2
fi
echo "$ clang++ $1.cpp -std=c++17 -Wall"
clang++ $1.cpp -std=c++17 -I=. -Wall -o $1l17
if [  -e $1l17 ]; then
./$1l17 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++03  -Wall"
g++-7 $1.cpp  -std=c++03 -I=. -Wall -o $1g03
if [  -e $1g03 ]; then
./$1g03 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++11  -Wall"
g++-7 $1.cpp  -std=c++11 -I=. -Wall -o $1g11
if [  -e $1g11 ]; then
./$1g11 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++14  -Wall"
g++-7 $1.cpp  -std=c++14 -I=. -Wall -o $1g14
if [  -e $1g14 ]; then
./$1g14 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++17  -Wall" 
g++-7 $1.cpp  -std=c++17 -I=. -Wall -o $1g17
if [  -e $1g17 ]; then
./$1g17 $2
fi
```

### C++N4741はclang++ -std=c++2a
のc1.shでコンパイルエラーを確認。
cpla.shで２つのコンパイラの合計５つのオプション

```sh:c1.sh
#!/bin/sh
echo "$ clang++ $1.cpp  -std=c++2a -Wall"
clang++ $1.cpp -std=c++2a -I=. -Wall -o $1l2a
if [  -e $1l2a ]; then
./$1l2a $2
rm $1l2a
fi
```
コンパイル対象が２つの場合

```sh:c2.sh
#!/bin/sh
echo "$ clang++ $1.cpp $2.cpp -std=c++2a -Wall"
clang++ $1.cpp $2.cpp -std=c++2a -I=. -Wall -o $1l2a
if [  -e $1l2a ]; then
./$1l2a $3
rm $1l2a
fi
```

```sh:c3.sh
#!/bin/sh
echo "$ clang++ $1.cpp $2.cpp $3.cpp -std=c++2a -Wall"
clang++ $1.cpp $2.cpp $3.cpp -std=c++2a -I=. -Wall -o $1l2a
if [  -e $1l2a ]; then
./$1l2a $4
rm $1l2a
fi
```
### ２種類のコンパイラ、合計５種類のスイッチ


```sh:spla.sh
#!/bin/sh
echo "$ clang++ $1.cpp -std=c++03 -Wall"
clang++ $1.cpp -std=c++03 -I=. -Wall -o $1l03
if [  -e $1l03 ]; then
./$1l03 $2
fi
echo "$ clang++ $1.cpp -std=c++17 -Wall"
clang++ $1.cpp -std=c++17 -I=. -Wall -o $1l17
if [  -e $1l17 ]; then
./$1l17 $2
fi
echo "$ clang++ $1.cpp -std=c++2a -Wall"
clang++ $1.cpp -std=c++2a -I=. -Wall -o $1l2a
if [  -e $1l2a ]; then
./$1l2a $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++03  -Wall"
g++-7 $1.cpp  -std=c++03 -I=. -Wall -o $1g03
if [  -e $1g03 ]; then
./$1g03 $2
fi
echo "\r"
echo "$ g++-7 $1.cpp -std=c++17  -Wall" 
g++-7 $1.cpp  -std=c++17 -I=. -Wall -o $1g17
if [  -e $1g17 ]; then
./$1g17 $2
fi
```

```sh:cpla2.sh
#!/bin/sh
echo "$ clang++ $1.cpp $2.cpp -std=c++03 -Wall"
clang++ $1.cpp $2.cpp -std=c++03 -I=. -Wall -o $1l03
if [  -e $1l03 ]; then
./$1l03 $3
fi
echo "$ clang++ $1.cpp $2.cpp -std=c++17 -Wall"
clang++ $1.cpp $2.cpp -std=c++17 -I=. -Wall -o $1l17
if [  -e $1l17 ]; then
./$1l17 $3
fi
echo "$ clang++ $1.cpp $2.cpp -std=c++2a -Wall"
clang++ $1.cpp $2.cpp -std=c++2a -I=. -Wall -o $1l2a
if [  -e $1l2a ]; then
./$1l2a $3
fi
echo "\r"
echo "$ g++-7 $1.cpp $2.cpp -std=c++03  -Wall"
g++-7 $1.cpp  $2.cpp -std=c++03 -I=. -Wall -o $1g03
if [  -e $1g03 ]; then
./$1g03 $3
fi
echo "\r"
echo "$ g++-7 $1.cpp $2.cpp -std=c++17  -Wall" 
g++-7 $1.cpp $2.cpp -std=c++17 -I=. -Wall -o $1g17
if [  -e $1g17 ]; then
./$1g17 $3
fi
```

```c++:cpla3.sh
#!/bin/sh
echo "$ clang++ $1.cpp $2.cpp $3.cpp -std=c++03 -Wall"
clang++ $1.cpp $2.cpp $3.cpp -std=c++03 -I=. -Wall -o $1l03
if [  -e $1l03 ]; then
./$1l03 $4
fi
echo "$ clang++ $1.cpp $2.cpp $3.cpp -std=c++17 -Wall"
clang++ $1.cpp $2.cpp $3.cpp -std=c++17 -I=. -Wall -o $1l17
if [  -e $1l17 ]; then
./$1l17 $4
fi
echo "$ clang++ $1.cpp $2.cpp $3.cpp -std=c++2a -Wall"
clang++ $1.cpp $2.cpp $3.cpp -std=c++2a -I=. -Wall -o $1l2a
if [  -e $1l2a ]; then
./$1l2a $4
fi
echo "\r"
echo "$ g++-7 $1.cpp $2.cpp $3.cpp -std=c++03  -Wall"
g++-7 $1.cpp  $2.cpp $3.cpp -std=c++03 -I=. -Wall -o $1g03
if [  -e $1g03 ]; then
./$1g03 $4
fi
echo "\r"
echo "$ g++-7 $1.cpp $2.cpp $3.cpp -std=c++17  -Wall" 
g++-7 $1.cpp $2.cpp $3.cpp -std=c++17 -I=. -Wall -o $1g17
if [  -e $1g17 ]; then
./$1g17 $4
fi
```

# 整形台本

```sh:a.sh
#!/bin/bash
astyle -s2 -c -N < $1.cpp > $1s2.cpp
cat $1s2.cpp
```
# 参考資料
CERT CPP入門(1) Rule 01. Declarations and Initialization (DCL)
https://qiita.com/kaizen_nagoya/items/61b3c431756fe8e6af3e

Linux初心者のシェルスクリプト入門
https://qiita.com/lrf141/items/6c01d2f7afff79cd7286

ShellScriptでよく使う表現
https://qiita.com/rotocuir/items/986e8ee732730606622b


## 自己参照
C++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on 
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

TOPPERSまとめ　#名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

Qiita-dockerお宝鑑定団
https://qiita.com/kaizen_nagoya/items/509e125263559b5aed5b

The C++ Standard Library: clang++とg++でコンパイルしてみた(まとめ):14件
https://qiita.com/kaizen_nagoya/items/9bdfaa392443d13e5759

C++17 - The Complete Guide clang++とg++でコンパイルしてみた(まとめ):4件
https://qiita.com/kaizen_nagoya/items/c000f307e642990781e1

C++N3242, 2011, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

プログラマによる、プログラマのための、統計と確率のプログラミングとその後 統計と確率一覧（０）
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
# 文書履歴(document history)
ver. 0.10 初版 20180320
ver. 0.11 第二引数渡し 20180321
ver. 0.12 C++版追記 20180322
ver. 0.13 gcc-7対応追記 20180407
ver. 0.14 echo "\r"、prompt表記 echo "$"追記。20180407
ver. 0.15 コンパイル対象ファイル２つ版、３つ版 20180407
ver. 0.16 "-I."追記。カレントディレクトリのヘッダファイルを<>include可能に　20180407
ver. 0.17 g++-7対応 20180408
ver. 0.18 コンパイルエラー時に実行しない設定追記。
"if [  -e x ]; then" "x" "fi"
ver. 0.19 -std=c++17 版 20180415
ver. 0.20 -Wallをつけた。20180423
ver. 0.21 # -trigraph用にコンパイルオプションを記述できるようにした版(c++2011用）20180424
ver. 0.22 -std=c++03, -std=c++11, -std=c++17の３種類でコンパイルする記述追記 20180424
ver. 0.23 N4606 Annex C(informative) Compatibility のため-std=c++14を追加した版を追記 20180503
ver. 0.24 N4741 でclang++ -std=c++2aだけ使うスクリプトと、2aを含めた5種類のスクリプトのファイルが１つ、２つ、３つ版　20180507
ver. 0.30 整形台本追記 20180524
ver. 0.31 C++N4910用に　-std=C++2b 版作成 追記 20220614
ver. 0.32 上記スクリプト加筆 20220722
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.