C標準ライブラリ | Programming Place Plus Modern C++編【標準ライブラリ】 第1章

トップページModern C++編

Modern C++編は作りかけで、更新が停止しています。代わりに、C++14 をベースにして、その他の方針についても見直しを行った、新C++編を作成しています。
Modern C++編は削除される予定です。

この章の概要

この章の概要です。


C標準ライブラリ

第0章で触れたように、C++ の標準ライブラリには、C言語の標準ライブラリも含まれています。ですから、C言語のときと同じように使えます。

#include <stdio.h>

int main()
{
    printf("Hello, C++\n");
    puts("Hello, C++");
}

実行結果:

Hello, C++
Hello, C++

C++11/14規格では、C99規格に相当するC標準ライブラリが使えます。 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);

    str[len - 1] = '\0';

    puts(str);

    return 0;
}


解答ページはこちら

参考リンク


更新履歴

’2018/4/2 「VisualC++」という表現を「VisualStudio」に統一。

’2018/1/5 Xcode 8.3.3 を clang 5.0.0 に置き換え。

’2017/7/30 clang 3.7 (Xcode 7.3) を、Xcode 8.3.3 に置き換え。

’2017/7/3 新規作成。



前の章へ (第0章 はじめに)

次の章へ (第2章 ムーブに関するユーティリティ)

Modern C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る