さまざまなプログラミング言語を紹介している本連載ですが、今回は、C言語およびC++言語を紹介します。現代のプログラミングの世界を、C/C++言語なしに語ることはできません。というのも、今、現役で使われている大抵のプログラミング言語は、C/C++言語の影響を受けているからです。全ての言語の親分的な存在です。その利用用途は、OSやデータベース、プログラミング言語や組み込み機器など、多岐にわたります。C/C++言語は、高速で汎用性が高く、小回りが利くため、長年にわたりプログラミング言語界の重要なポジションに座しています。

  • C言語のプログラム

    C言語のプログラム

とにかく小回りが利くC言語

C言語は、システム記述言語として開発されています。そのため、OSやプログラミング言語など、基礎的なソフトウェアを記述するのに広く利用されています。その理由は、ハードウェアの性能を最大限に引き出すプログラムを記述できるからです。その特徴的な機能の一つが『インラインアセンブラ』の機能です。多くの処理系で利用できるこの機能は、C言語のプログラムの中に、アセンブラ(機械語)を直接記述できるというものです。ハードウェアを操作する命令を直接埋め込むことができるため非常に強力です。ただし、ハードウェアに依存した強力な機能ほど移植性を損なうため、使用には注意が必要になります。とは言え、低レベルの処理も記述できるということは、C言語のメリットです。組み込み機器などでは、限られたリソースの中で最大限の力を発揮しなくてはならないので、C言語が好まれて使われています。

C言語とC++言語について

基本的に、C言語とC++言語は、別の言語です。プログラミング言語のランキングなど見ていると、よく「C/C++」と略されるので、CとC++は同じ言語であると思っている方が居るかもしれません。しかし、「C/C++」とは、C言語とC++言語の二つの言語を表しています。ただし、C++言語は、C言語にオブジェクト指向など様々な拡張を施した言語であり、互換性が全くないわけではありません。C言語で作成したライブラリを、C++言語で利用することもできるよう工夫されています。

また、C/C++言語は、それぞれ標準化団体のISOやANSIによって言語の標準化が行われています。そのため、C/C++と言っても、一つの製品を指すわけではなく、いろいろな企業や団体により処理系が実装されています。主要なものには、clang、GCC、Microsoft Visual C++、C++ Builderなど、いろいろなものがあります。こうした主要な製品では、C/C++の両方に対応していることが多く、そのため、「C/C++」とまとめて記述ことが多いのです。

C/C++言語の歴史

C言語は、1972年、ベル研究所で産声をあげました。設計者は、 デニス・リッチーです。彼は、UNIXというOSの開発メンバーであり、UNIX上で動くユーティリティを作成するために、C言語が作成されました。最初は、ユーティリティを作成するための言語でしたが、後日、UNIX自身もC言語で記述されるようになりました。その後、OSの開発に使われている実績や、高級言語ながらハードウェアよりの処理を記述できることなどの理由から、C言語は、様々な分野で使われるようになりました。

そして、幅広く使われるようになると、多くの実装が登場します。C言語という名前を冠しながら、C言語と互換性のない実装が登場したため、C言語の規格を標準化する必要が生じました。1989年よりANSIとISO/IECにより標準化が行われ、C89/C90という規格が誕生しました。その後、1999年にはC99が、2011年にはC11という規格が制定されています。

また、C++言語も1983年にベル研究所で開発されましたが、設計者はビャーネ・ストロヴストルップで、C言語の設計者とは別の人です。彼は、Simula、ALOGL68、Ada、CLU、MLなどのプログラミング言語を参考にして、C言語にオブジェクト指向の機能を加え、C++言語を作りました。1989年には、C++2.0をリリースしましたが、多重継承や抽象クラスなどの高度なオブジェクト指向に加え、テンプレートや例外処理、名前空間など、その後のプログラミング言語に影響を与える革新的な機能を盛り込みました。その後、C言語と同じように、多くの環境で利用されることになり、1998年に、ISO/IECより標準化が行われ、2011年には「C++11」、2014年には「C++14」、2017年には「C++17」が策定されています。

C言語を使ってみよう

それでは、簡単にC言語でプログラムを作ってみましょう。現在では、多くのC/C++言語の処理系が無料で利用できるようになっています。Windowsを利用しているならば、Microsoft Visual Studioのコミュニティ版がありますし、macOSを利用しているならば、Xcodeが提供されています。これらの環境を利用すれば、無償でC言語のプログラムを開発することができます。

とは言え、これらの開発環境をインストールするには、かなり時間がかかります。加えて、性能の良くないPCにインストールするのには向いていません。C言語の雰囲気をちょっと味わいたいだけであれば、Webサービスを利用するのが良いでしょう。

今回は、ideoneというWebサービスを利用していましょう。Webブラウザから、このWebサイトにアクセスするだけで、C言語のプログラムを実行することができます。

  • <a href="https://ideone.com/" target="_blank">ideone.com</a>にアクセスしたところ

    ideone.comにアクセスしたところ

まずは、ideoneにアクセスしましょう。そして、以下のプログラムをコピーして貼り付けます。

// ライブラリの取り込み --- (*1)
#include <stdio.h>
// メインプログラム --- (*2)
int main(void) {
    // メッセージを表示 --- (*3)
    printf("Hello, World!");
    return 0;
}

この時、画面の左下のボタンで、プログラミング言語を切り替えるようになっています。始めてこのサイトにアクセスした時は、Javaになっているかもしれません。そこで、「C」を選びましょう。

  • 左下のボタンでプログラミング言語を切り替えられる

    左下のボタンでプログラミング言語を切り替えられる

プログラムを記述したら、右下の[Run]のボタンを押すと、プログラムを実行し、結果を確認できます。

  • プログラムを実行したところ

    プログラムを実行したところ

プログラムを確認してみましょう。(*1)の部分では、stdioというC言語の基本ライブラリを取り込みます。C言語ではコンソールに文字を表示するだけでも、stdioという基本ライブラリが必要になります。そして、(*2)の部分では、main関数を定義します。C言語で実行プログラムを作る場合、必ず、main関数を定義し、そこに必要な処理を記述します。(*3)の部分では、文字を出力しますが、そのために、ptintf関数を利用します。

C言語でFizzBuzz問題を解いてみよう

本連載では、いろいろなプログラムでFizzBuzz問題を解いています。FizzBuzz問題とは、次のような問題です。

1から100までの数字を出力する際に、3の倍数の時「Fizz」、5の倍数の時「Buzz」、3と5の倍数の時「FizzBuzz」と表示するプログラムを作って下さい。

C言語で作ると、以下のようになります。以下のプログラムも、ideoneのエディタに貼り付けて実行してみましょう。

#include <stdio.h>

// FizzBuzz関数 --- (*1)
void fizzbuzz(int i) {
    if (i % 3 == 0 && i % 5 == 0) printf("FizzBuzz\n");
    else if (i % 3 == 0) printf("Fizz\n");
    else if (i % 5 == 0) printf("Buzz\n");
    else printf("%d\n", i);
}
// メイン関数 --- (*2)
int main(void) {
    for (int i = 1; i <= 100; i++) {
        fizzbuzz(i);
    }
    return 0;
}

実行すると、以下のように表示されます。

プログラムを見てみましょう。(*1)の部分では、main関数から呼び出されるfizzbuzz関数を定義します。この関数は、引数に指定した変数iの値に応じてFizzBuzzゲームの結果を出力するものになっています。if文を連続で記述することにより、変数iが3と5のどの倍数なのかを判定します。(*2)のメイン関数では、for構文を利用して、1から100まで、順番にfizzbuzz関数を呼び出すようにしています。

まとめ - C/C++言語

今では、JavaやC#、PHPやGO言語など、C言語から派生した多くのプログラミング言語があります。しかし、移植性に優れ、小回りの利くC言語は、今でも多くのプロジェクトで利用され続けています。そして、今後も、C/C++言語は、使われ続けていくことでしょう。

とは言え、若いWeb系プログラマーの中には、業務でC/C++言語を使う機会のない方も増えています。もし、C言語を業務で使わないとしても、C言語を学ぶことにより、コンピューターやプログラミング言語に対する造詣を深めることができます。プログラマーとして、レベルアップを目指している皆さんにも、C/C++言語を学ぶことをオススメしたいと思います。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。