LoginSignup
0

The C++ Standard Library: clang++とg++でコンパイルしてみた(7) io

Last updated at Posted at 2018-06-17

The C++ Standard Library - A Tutorial and Reference, 2nd Edition by Nicolai M. Josuttis
http://cppstdlib.com

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

目的(purpose)

The C++ Standard Libraryコンパイル記録は、コンパイラおよび対応標準、コンパイラの版により、コンパイルエラーMessageの違いを記録し、どのエラーが出たら、どの版またはどの対応標準にすればエラーが少なくなるかを考察するための資料の第一歩です。

成果(outcome)

(1)コンパイラの種類、対応標準の違いによってエラーの数が違う。
(2)同じエラーであってもMessageの表現が違う。
(3) Error Messageのネットで検索する際に役立つ。

編纂器(compiler)

clang++

clang version 6.0.0 (tags/RELEASE_600/final)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin

g++

g++ (Homebrew GCC 8.1.0) 8.1.0
Copyright (C) 2018 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.

#編纂実行(compile and go)
##io

io
clang++ ./io/cat1.cpp -std=c++2a -Wall
g++ ./io/cat1.cpp -std=c++2a -Wall
clang++ ./io/cat2.cpp -std=c++2a -Wall
g++ ./io/cat2.cpp -std=c++2a -Wall
clang++ ./io/charcat1.cpp -std=c++2a -Wall
g++ ./io/charcat1.cpp -std=c++2a -Wall
io2
clang++ charcat1.cpp -std=c++2a -Wall
g++ charcat1.cpp -std=c++2a -Wall
io3
clang++ charcat2.cpp -std=c++2a -Wall
g++ charcat2.cpp -std=c++2a -Wall
io4
clang++ copy1.cpp -std=c++2a -Wall
copy2.cpp
g++ copy1.cpp -std=c++2a -Wall
io5
clang++ copy2.cpp -std=c++2a -Wall
g++ copy2.cpp -std=c++2a -Wall
io6
clang++ countlines1.cpp -std=c++2a -Wall
20
g++ countlines1.cpp -std=c++2a -Wall
0
io7
clang++ fstream1.cpp -std=c++2a -Wall
value:  32   char:   
value:  33   char:  !
value:  34   char:  "
value:  35   char:  #
value:  36   char:  $
value:  37   char:  %
value:  38   char:  &
value:  39   char:  '
value:  40   char:  (
value:  41   char:  )
value:  42   char:  *
value:  43   char:  +
value:  44   char:  ,
value:  45   char:  -
value:  46   char:  .
value:  47   char:  /
value:  48   char:  0
value:  49   char:  1
value:  50   char:  2
value:  51   char:  3
value:  52   char:  4
value:  53   char:  5
value:  54   char:  6
value:  55   char:  7
value:  56   char:  8
value:  57   char:  9
value:  58   char:  :
value:  59   char:  ;
value:  60   char:  <
value:  61   char:  =
value:  62   char:  >
value:  63   char:  ?
value:  64   char:  @
value:  65   char:  A
value:  66   char:  B
value:  67   char:  C
value:  68   char:  D
value:  69   char:  E
value:  70   char:  F
value:  71   char:  G
value:  72   char:  H
value:  73   char:  I
value:  74   char:  J
value:  75   char:  K
value:  76   char:  L
value:  77   char:  M
value:  78   char:  N
value:  79   char:  O
value:  80   char:  P
value:  81   char:  Q
value:  82   char:  R
value:  83   char:  S
value:  84   char:  T
value:  85   char:  U
value:  86   char:  V
value:  87   char:  W
value:  88   char:  X
value:  89   char:  Y
value:  90   char:  Z
value:  91   char:  [
value:  92   char:  \
value:  93   char:  ]
value:  94   char:  ^
value:  95   char:  _
value:  96   char:  `
value:  97   char:  a
value:  98   char:  b
value:  99   char:  c
value: 100   char:  d
value: 101   char:  e
value: 102   char:  f
value: 103   char:  g
value: 104   char:  h
value: 105   char:  i
value: 106   char:  j
value: 107   char:  k
value: 108   char:  l
value: 109   char:  m
value: 110   char:  n
value: 111   char:  o
value: 112   char:  p
value: 113   char:  q
value: 114   char:  r
value: 115   char:  s
value: 116   char:  t
value: 117   char:  u
value: 118   char:  v
value: 119   char:  w
value: 120   char:  x
value: 121   char:  y
value: 122   char:  z
value: 123   char:  {
value: 124   char:  |
value: 125   char:  }
value: 126   char:  ~
value: 127   char:  
value: 128   char:  ?
value: 129   char:  ?
value: 130   char:  ?
value: 131   char:  ?
value: 132   char:  ?
value: 133   char:  ?
value: 134   char:  ?
value: 135   char:  ?
value: 136   char:  ?
value: 137   char:  ?
value: 138   char:  ?
value: 139   char:  ?
value: 140   char:  ?
value: 141   char:  ?
value: 142   char:  ?
value: 143   char:  ?
value: 144   char:  ?
value: 145   char:  ?
value: 146   char:  ?
value: 147   char:  ?
value: 148   char:  ?
value: 149   char:  ?
value: 150   char:  ?
value: 151   char:  ?
value: 152   char:  ?
value: 153   char:  ?
value: 154   char:  ?
value: 155   char:  ?
value: 156   char:  ?
value: 157   char:  ?
value: 158   char:  ?
value: 159   char:  ?
value: 160   char:  ?
value: 161   char:  ?
value: 162   char:  ?
value: 163   char:  ?
value: 164   char:  ?
value: 165   char:  ?
value: 166   char:  ?
value: 167   char:  ?
value: 168   char:  ?
value: 169   char:  ?
value: 170   char:  ?
value: 171   char:  ?
value: 172   char:  ?
value: 173   char:  ?
value: 174   char:  ?
value: 175   char:  ?
value: 176   char:  ?
value: 177   char:  ?
value: 178   char:  ?
value: 179   char:  ?
value: 180   char:  ?
value: 181   char:  ?
value: 182   char:  ?
value: 183   char:  ?
value: 184   char:  ?
value: 185   char:  ?
value: 186   char:  ?
value: 187   char:  ?
value: 188   char:  ?
value: 189   char:  ?
value: 190   char:  ?
value: 191   char:  ?
value: 192   char:  ?
value: 193   char:  ?
value: 194   char:  ?
value: 195   char:  ?
value: 196   char:  ?
value: 197   char:  ?
value: 198   char:  ?
value: 199   char:  ?
value: 200   char:  ?
value: 201   char:  ?
value: 202   char:  ?
value: 203   char:  ?
value: 204   char:  ?
value: 205   char:  ?
value: 206   char:  ?
value: 207   char:  ?
value: 208   char:  ?
value: 209   char:  ?
value: 210   char:  ?
value: 211   char:  ?
value: 212   char:  ?
value: 213   char:  ?
value: 214   char:  ?
value: 215   char:  ?
value: 216   char:  ?
value: 217   char:  ?
value: 218   char:  ?
value: 219   char:  ?
value: 220   char:  ?
value: 221   char:  ?
value: 222   char:  ?
value: 223   char:  ?
value: 224   char:  ?
value: 225   char:  ?
value: 226   char:  ?
value: 227   char:  ?
value: 228   char:  ?
value: 229   char:  ?
value: 230   char:  ?
value: 231   char:  ?
value: 232   char:  ?
value: 233   char:  ?
value: 234   char:  ?
value: 235   char:  ?
value: 236   char:  ?
value: 237   char:  ?
value: 238   char:  ?
value: 239   char:  ?
value: 240   char:  ?
value: 241   char:  ?
value: 242   char:  ?
value: 243   char:  ?
value: 244   char:  ?
value: 245   char:  ?
value: 246   char:  ?
value: 247   char:  ?
value: 248   char:  ?
value: 249   char:  ?
value: 250   char:  ?
value: 251   char:  ?
value: 252   char:  ?
value: 253   char:  ?
value: 254   char:  ?
value: 255   char:  ?
g++ fstream1.cpp -std=c++2a -Wall
value:  32   char:   
value:  33   char:  !
value:  34   char:  "
value:  35   char:  #
value:  36   char:  $
value:  37   char:  %
value:  38   char:  &
value:  39   char:  '
value:  40   char:  (
value:  41   char:  )
value:  42   char:  *
value:  43   char:  +
value:  44   char:  ,
value:  45   char:  -
value:  46   char:  .
value:  47   char:  /
value:  48   char:  0
value:  49   char:  1
value:  50   char:  2
value:  51   char:  3
value:  52   char:  4
value:  53   char:  5
value:  54   char:  6
value:  55   char:  7
value:  56   char:  8
value:  57   char:  9
value:  58   char:  :
value:  59   char:  ;
value:  60   char:  <
value:  61   char:  =
value:  62   char:  >
value:  63   char:  ?
value:  64   char:  @
value:  65   char:  A
value:  66   char:  B
value:  67   char:  C
value:  68   char:  D
value:  69   char:  E
value:  70   char:  F
value:  71   char:  G
value:  72   char:  H
value:  73   char:  I
value:  74   char:  J
value:  75   char:  K
value:  76   char:  L
value:  77   char:  M
value:  78   char:  N
value:  79   char:  O
value:  80   char:  P
value:  81   char:  Q
value:  82   char:  R
value:  83   char:  S
value:  84   char:  T
value:  85   char:  U
value:  86   char:  V
value:  87   char:  W
value:  88   char:  X
value:  89   char:  Y
value:  90   char:  Z
value:  91   char:  [
value:  92   char:  \
value:  93   char:  ]
value:  94   char:  ^
value:  95   char:  _
value:  96   char:  `
value:  97   char:  a
value:  98   char:  b
value:  99   char:  c
value: 100   char:  d
value: 101   char:  e
value: 102   char:  f
value: 103   char:  g
value: 104   char:  h
value: 105   char:  i
value: 106   char:  j
value: 107   char:  k
value: 108   char:  l
value: 109   char:  m
value: 110   char:  n
value: 111   char:  o
value: 112   char:  p
value: 113   char:  q
value: 114   char:  r
value: 115   char:  s
value: 116   char:  t
value: 117   char:  u
value: 118   char:  v
value: 119   char:  w
value: 120   char:  x
value: 121   char:  y
value: 122   char:  z
value: 123   char:  {
value: 124   char:  |
value: 125   char:  }
value: 126   char:  ~
value: 127   char:  
value: 128   char:  ?
value: 129   char:  ?
value: 130   char:  ?
value: 131   char:  ?
value: 132   char:  ?
value: 133   char:  ?
value: 134   char:  ?
value: 135   char:  ?
value: 136   char:  ?
value: 137   char:  ?
value: 138   char:  ?
value: 139   char:  ?
value: 140   char:  ?
value: 141   char:  ?
value: 142   char:  ?
value: 143   char:  ?
value: 144   char:  ?
value: 145   char:  ?
value: 146   char:  ?
value: 147   char:  ?
value: 148   char:  ?
value: 149   char:  ?
value: 150   char:  ?
value: 151   char:  ?
value: 152   char:  ?
value: 153   char:  ?
value: 154   char:  ?
value: 155   char:  ?
value: 156   char:  ?
value: 157   char:  ?
value: 158   char:  ?
value: 159   char:  ?
value: 160   char:  ?
value: 161   char:  ?
value: 162   char:  ?
value: 163   char:  ?
value: 164   char:  ?
value: 165   char:  ?
value: 166   char:  ?
value: 167   char:  ?
value: 168   char:  ?
value: 169   char:  ?
value: 170   char:  ?
value: 171   char:  ?
value: 172   char:  ?
value: 173   char:  ?
value: 174   char:  ?
value: 175   char:  ?
value: 176   char:  ?
value: 177   char:  ?
value: 178   char:  ?
value: 179   char:  ?
value: 180   char:  ?
value: 181   char:  ?
value: 182   char:  ?
value: 183   char:  ?
value: 184   char:  ?
value: 185   char:  ?
value: 186   char:  ?
value: 187   char:  ?
value: 188   char:  ?
value: 189   char:  ?
value: 190   char:  ?
value: 191   char:  ?
value: 192   char:  ?
value: 193   char:  ?
value: 194   char:  ?
value: 195   char:  ?
value: 196   char:  ?
value: 197   char:  ?
value: 198   char:  ?
value: 199   char:  ?
value: 200   char:  ?
value: 201   char:  ?
value: 202   char:  ?
value: 203   char:  ?
value: 204   char:  ?
value: 205   char:  ?
value: 206   char:  ?
value: 207   char:  ?
value: 208   char:  ?
value: 209   char:  ?
value: 210   char:  ?
value: 211   char:  ?
value: 212   char:  ?
value: 213   char:  ?
value: 214   char:  ?
value: 215   char:  ?
value: 216   char:  ?
value: 217   char:  ?
value: 218   char:  ?
value: 219   char:  ?
value: 220   char:  ?
value: 221   char:  ?
value: 222   char:  ?
value: 223   char:  ?
value: 224   char:  ?
value: 225   char:  ?
value: 226   char:  ?
value: 227   char:  ?
value: 228   char:  ?
value: 229   char:  ?
value: 230   char:  ?
value: 231   char:  ?
value: 232   char:  ?
value: 233   char:  ?
value: 234   char:  ?
value: 235   char:  ?
value: 236   char:  ?
value: 237   char:  ?
value: 238   char:  ?
value: 239   char:  ?
value: 240   char:  ?
value: 241   char:  ?
value: 242   char:  ?
value: 243   char:  ?
value: 244   char:  ?
value: 245   char:  ?
value: 246   char:  ?
value: 247   char:  ?
value: 248   char:  ?
value: 249   char:  ?
value: 250   char:  ?
value: 251   char:  ?
value: 252   char:  ?
value: 253   char:  ?
value: 254   char:  ?
value: 255   char:  ?
clang++ fstream2.cpp -std=c++2a -Wall
g++ fstream2.cpp -std=c++2a -Wall
clang++ ignore1.cpp -std=c++2a -Wall
read int and ignore rest of the line
int: 0
read int and ignore two lines
int: 0
g++ ignore1.cpp -std=c++2a -Wall
read int and ignore rest of the line
int: 1
read int and ignore two lines
int: 1
io8
$ ../cga.sh io8
clang++ ignore2.cpp -std=c++2a -Wall
read int and ignore rest of the line
int: 0
read int and ignore two lines
int: 0
read int: 
int: 0
g++ ignore2.cpp -std=c++2a -Wall
read int and ignore rest of the line
int: 32766
read int and ignore two lines
int: 32766
read int: 
int: 32766
io9
$ ../cga.sh io9
clang++ inbuf1.cpp -std=c++2a -Wall
io1.cpp
p
outbuf1.cp
g++ inbuf1.cpp -std=c++2a -Wall
p
outbufuf1i18n.cpp

clang++ outbuf2.cpp -std=c++2a -Wall
31 hexadecimal: 1f
g++ outbuf2.cpp -std=c++2a -Wall
31 hexadecimal: 1f
clang++ outbuf3.cpp -std=c++2a -Wall
31 hexadecimal: 1f
g++ outbuf3.cpp -std=c++2a -Wall
31 hexadecimal: 1f
clang++ sstream1.cpp -std=c++2a -Wall
dec: 15 hex: f

oct: 17 hex: f
float: 4.67 bitset: 001011010011101

g++ sstream1.cpp -std=c++2a -Wall
dec: 15 hex: f

oct: 17 hex: f
float: 4.67 bitset: 001011010011101

clang++ sstream2.cpp -std=c++2a -Wall
firstname: Nicolai
middle:    M.
lastname:  Josuttis
firstname: Nico
middle:    
lastname:  Josuttis
g++ sstream2.cpp -std=c++2a -Wall
firstname: Nicolai
middle:    M.
lastname:  Josuttis
firstname: Nico
middle:    
lastname:  Josuttis
clang++ streambuffer1.cpp -std=c++2a -Wall
hexout: 0xb1 cout: 177 hexout: 0xffffffcf cout: -49 
g++ streambuffer1.cpp -std=c++2a -Wall
hexout: 0xb1 cout: 177 hexout: 0xffffffcf cout: -49 
clang++ streambuffer2.cpp -std=c++2a -Wall
We print 5 lines hexadecimal
0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 
0x2 0x4 0x6 0x8 0xa 0xc 0xe 0x10 0x12 0x14 
0x3 0x6 0x9 0xc 0xf 0x12 0x15 0x18 0x1b 0x1e 
0x4 0x8 0xc 0x10 0x14 0x18 0x1c 0x20 0x24 0x28 
0x5 0xa 0xf 0x14 0x19 0x1e 0x23 0x28 0x2d 0x32 
That was the output of 5 hexadecimal lines 
g++ streambuffer2.cpp -std=c++2a -Wall
We print 5 lines hexadecimal
0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 
0x2 0x4 0x6 0x8 0xa 0xc 0xe 0x10 0x12 0x14 
0x3 0x6 0x9 0xc 0xf 0x12 0x15 0x18 0x1b 0x1e 
0x4 0x8 0xc 0x10 0x14 0x18 0x1c 0x20 0x24 0x28 
0x5 0xa 0xf 0x14 0x19 0x1e 0x23 0x28 0x2d 0x32 
That was the output of 5 hexadecimal lines 
clang++ streamreadwrite1.cpp -std=c++2a -Wall
1. line

1. line
2. line

1. line
2. line
3. line

1. line
2. line
3. line
4. line

g++ streamreadwrite1.cpp -std=c++2a -Wall
1. line

1. line
2. line

1. line
2. line
3. line

1. line
2. line
3. line
4. line

clang++ streamredirect1.cpp -std=c++2a -Wall
the first row
the last row
g++ streamredirect1.cpp -std=c++2a -Wall
the first row
the last row
clang++ sum1.cpp -std=c++2a -Wall
I/O exception: ios_base::clear: unspecified iostream_category error
g++ sum1.cpp -std=c++2a -Wall
sum: 0
ioa
$ ../cga.sh ioa
clang++ sum2.cpp -std=c++2a -Wall
I/O exception: input error in readAndProcessSum(): unspecified iostream_category error
g++ sum2.cpp -std=c++2a -Wall
sum: 0

iob
$ ../cga.sh iob
clang++ timemanipulator1.cpp -std=c++2a -Wall
date: 06/17/18
time: 12:11:13

new time [HH:MM]: invalid format read
g++ timemanipulator1.cpp -std=c++2a -Wall
date: 06/17/18
time: 12:11:14

new time [HH:MM]: invalid format read

検討事項(agenda)

  1. コンパイルエラーをなくす修正方法
  2. 役に立つまたは意味のあるその他の出力

参考資料(reference)

プログラミング言語教育のXYZ

https://qiita.com/kaizen_nagoya/items/1950c5810fb5c0b07be4
プログラミング言語教育のXYZ(youtube)
https://www.youtube.com/watch?v=He1_tg4px-w&t=486s

Autosar Guidelines C++14

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

C++N4741 2018

Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4741.pdf

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

C++N4606 2016

Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf

C++N4606, 2016符号断片編纂一覧(example code compile list)
Working Draft 2016, ISO/IEC 14882(1)
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

### CEDD(Compile Error Driven Design)
初めての CEDD(Compile Error Driven Design) 8回直してコンパイル。
https://qiita.com/kaizen_nagoya/items/9494236aa1753f3fd1e1

コンパイルエラーを記録するとよい理由7つ
https://qiita.com/kaizen_nagoya/items/85c0e92b206883140e89
docker gnu(gcc/g++) and llvm(clang/clang++)
https://qiita.com/drafts/059874ea39c4de64c0f7

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

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standardのコード断片をコンパイルするためにしていること
https://qiita.com/kaizen_nagoya/items/a8d7ee2f2e29e76c19c1

コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da

Clang/Clang++(LLVM) gcc/g++(GNU) コンパイラ警告等比較
https://qiita.com/kaizen_nagoya/items/9a82b958cc3aeef0403f

C++2003とC++2017でコンパイルエラーになるならない事例集
https://qiita.com/kaizen_nagoya/items/a13ea3823441c430edff

Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d

cpprefjpのdecltypeをコンパイル試験
https://qiita.com/kaizen_nagoya/items/090909af702f0d5d8a67

MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74

C++ Templates Part1 BASICS Chapter 3. Class Templates 3.2 Use of Class Template Stack stack1test.cpp
https://qiita.com/kaizen_nagoya/items/cd5fc49106fad5a4e9ed

ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed)
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1

C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

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

'wchar.h' file not found で困った clang++ macOS
https://qiita.com/kaizen_nagoya/items/de15cd46d657517fac11

Open POSIX Test Suiteの使い方を調べはじめました
https://qiita.com/kaizen_nagoya/items/644d5e407f5faf96e6dc

MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb

どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00

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

「C++完全理解ガイド」の同意できること上位10
https://qiita.com/kaizen_nagoya/items/aa5744e0c4a8618c7671

文献履歴(document history)

ver. 0.10 初稿 20180616
ver. 0.11 まとめURL追記 20180625
ver. 0.12 ありがとう追記 20230413

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0