C++編【標準ライブラリ】 第1章 C標準ライブラリの扱い

先頭へ戻る

この章と同じ(または似た)情報を扱うページが、Modern C++編 (C++11/14/17 対応) の以下の章にあります。

このエントリーをはてなブックマークに追加

この章の概要

この章の概要です。

C標準ライブラリを使う

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

#include <stdio.h>

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

実行結果:

Hello, C++
Hello, C++

C++03規格では、C95規格のC標準ライブラリが使えます。
なお、C言語の標準ライブラリについては、 「C言語編 標準ライブラリのリファレンス」を参照して下さい。

C++11

C++11規格では、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 といった具合です。

これらの新しいヘッダには、元となったC言語版のヘッダと同じ定義が含まれています。 違いは、std名前空間で囲まれていることです。
名前空間についての詳細は、【言語解説】第3章を参照して頂くとして、 実用的には、先ほどのプログラム例のように、printf関数、puts関数の呼び出し時に「std::」という記述が必要になるという違いが生まれます。 ただし、この指定がなくてもよいコンパイラもあり得ます(VisualC++、clang はいずれも、この記述がなくてもコンパイルできます)。

単に不便になるだけのように思えるかも知れませんが、この名前空間という仕組みは重要な機能です。 printf が std::printf になったのは、「Aさん」という人間を「X町のAさん」のように特定したことと同じ意味です。 これによって、同じ「Aさん」でも「Y町のAさん」とは違う人間だと分かる訳です。
この機能を使えば、同名の関数でも、別の名前空間に入れることで明確に区別できるようになります。

参考までに、cstdio と stdio.h の実装例を示すと、次のようになります。

// cstdio
namespace std {
	int printf(const char*, ...);
}
// stdio.h
#include <cstdio>
using namespace std;


練習問題

問題① 次のC言語プログラムを、C++ で追加されたヘッダを使う形に書き換えて下さい。

#include <stdio.h>
#include <string.h>

int main(void)
{
	char str[] = "abcde\n";
	size_t len;
	
	len = strlen(str);
	str[len - 1] = '\0';

	puts(str);
	
	return 0;
}


解答ページはこちら

参考リンク

更新履歴

'2018/1/5 stdio.h、cstdio を使った VisualC++ と Xcode での例示を削除。

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

'2016/10/15 clang の対応バージョンを 3.7 に更新。

'2015/10/12 clang の対応バージョンを 3.4 に更新。

'2015/9/5 VisualC++ 2012 の対応終了。

'2014/10/18 clang 3.2 に対応。

'2014/2/1 VisualC++ 2013 に対応。

'2014/1/14 VisualC++2008 の対応終了。

'2014/1/13 clang 3.0 に対応。

'2013/2/11 新規作成。



前の章へ

次の章へ

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

Programming Place Plus のトップページへ