この章の概要です。
第0章で触れたように、C++ の標準ライブラリには、C言語の標準ライブラリも含まれています。ですから、C言語のときと同じように使えます。
#include <stdio.h>
int main()
{
("Hello, C++\n");
printf("Hello, C++");
puts}
実行結果:
Hello, C++
Hello, C++
C++11/14規格では、C99規格に相当するC標準ライブラリが使えます。 C言語の標準ライブラリについては、 「C言語編 標準ライブラリのリファレンス」を参照してください。
先ほどのように、C標準ライブラリを、C言語とまったく同じように使うことはできますが、C++ では、もう少し違った方法で使うのが一般的です。冒頭の例を書き換えると、次のようになります。
#include <cstdio>
int main()
{
std::printf("Hello, C++\n");
std::puts("Hello, C++");
}
実行結果:
Hello, C++
Hello, C++
C++ では、C標準ライブラリのヘッダ名(<stdio.h> など) の先頭に C を付け、拡張子の .h を取った名前の標準ヘッダが定義されています。<stdio.h> なら <cstdio> に、<string.h> なら <cstring> といった具合です。両者に含まれている機能自体は同じですが、名前空間に関して違いがあります。
名前空間に関する詳細は、【言語解説】第4章で解説しているので、そちらを参照していただきたいのですが、実用上の違いとして、A という名前空間に囲まれている名前を使う際には、「A::」のような修飾が必要です。標準ライブラリの場合、std という名前空間に囲まれているので、「std::」という修飾が必要です。
「std::」の修飾が必要という表現は、using を使うことで省くことができるので、正確ではありませんが、ここではこの表現で通しています。詳細は、【言語解説】第4章で解説しています。
<cstdio> のような、C++ 形式の名前の標準ヘッダは、そこに含まれている名前が std名前空間で囲まれています。また、C言語のときと同じように「std::」の修飾無しでも使えるようになっているかもしれません。
一方、<stdio.h> のような、C言語形式の名前の標準ヘッダは、「std::」の修飾無しで使えるように提供されています。ただし、「std::」の修飾を行っても使えるようになっているかもしれません。
つまりどちらのヘッダも、一方の使い方は”確実”に行え、他方の使い方は”できるかも”知れない、ということです。まとめると、次のようになります。
ヘッダ名 | 「std::」の修飾ありでの使用 | 「std::」の修飾なしでの使用 |
---|---|---|
C言語形式 (stdio.h など) | できるかもしれない | 必ずできる |
C++形式 (cstdio など) | 必ずできる | できるかもしれない |
C++形式の名前のヘッダを使った場合、Visual Studio、clang ともに、「std::」の修飾はあってもなくても良いですが、修飾しておいた方が良いでしょう。
問題① 次のC言語プログラムを、C++ で追加されたヘッダを使う形に書き換えてください。
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "abcde\n";
size_t len = strlen(str);
[len - 1] = '\0';
str
(str);
puts
return 0;
}
「VisualC++」という表現を「VisualStudio」に統一。
Xcode 8.3.3 を clang 5.0.0 に置き換え。
clang 3.7 (Xcode 7.3) を、Xcode 8.3.3 に置き換え。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |