はじめに | Programming Place Plus C言語編 第0章

トップページC言語編

この章の概要 🔗

このページでは、「C言語編の方針と、C言語のこと」を取り上げます。

以下は目次です。



C言語編の内容 🔗

C言語編では、C言語 (programming language C)(あるいは単に C )と呼ばれるプログラミング言語 (programming language) について、入門段階から順を追って解説していきます。

C言語編を読み進めるにあたって、できるだけ前提知識を必要としないようにしていますが、コンピュータや Windows などの基本的な操作方法といったことは説明していません。

補足事項について 🔗

解説は原則的には、本文とサンプルプログラムを読み進めていくように構成しますが、それ以外に、理解を助ける補足解説を挟みます。補足解説は、次のように枠で囲んで、本文から切り離して記述します。

この部分に書かれている内容は、補足解説です。

読者層に応じた補足情報を、次のように記述することがあります。これらは対象者の方だけがお読みください。

【C89/95 経験者】古いC言語の経験者に向けた補足解説です。

【C++プログラマー】C++ の経験者に向けた補足解説です。

プログラミング自体が初めての人に向けた補足解説です。

また、当サイトが扱っているバージョンよりも新しいC言語に関する補足事項を次のように記述します。

【C11】C11 で追加や変更があった点についての補足解説です。

【C17】C17 で追加や変更があった点についての補足解説です。

【C23】C23 で追加や変更があった点についての補足解説です。

難しい話題、まだ解説していない知識が必要な話題、専門的な知識が必要な話題といったときには、次のように記述します。前提知識をお持ちでない方には不要な追加情報なので、読み飛ばして問題ありません。

【上級】より高度な話題です。

プログラミングが初めての方へ

C言語編では、プログラミングそのものの経験がない方でもご理解いただけるように努めるつもりですが、なかなか厳しいかもしれません。

C言語によるプログラミングは、非常に難しいといわれています。また、特に最初のうちは、文字を入力すると、文字が表示されるというような、どちらかといえば地味な例が多くなりがちで、この辺りがつまらなく感じる方も多いでしょう。

少なくとも、「勉強する目的」を明確にお持ちください。それがないのなら、モチベーションが続かず、C言語(もしくはプログラミング自体)を学び続けることが苦痛になってしまうかもしれません。「目的はないが、とりあえずやってみる」にはC言語は厳しい選択です。また、目的を明確に考えてみると、自分が学ぶべきものがC言語ではないことに気付く可能性もあります。

もし、やってみたいと思っていることがあるのなら(Web系の開発がしたい、ゲーム開発がしたいなど)、その分野を経験している人が書いている記事や本、あるいは SNS での発言などを探してみることを勧めます。この界隈は、分野が違うと事情がまったく異なる場合があるので、「プログラミングを知っている人」でなく、「その分野を知っている人」から情報を得ることが重要です。詳しそうにみえる人でも、その人が関わっている分野の話しかしていないことが多々あります。

ちなみに、この文章を書いている私のキャリアは、家庭用ゲーム機向けのゲーム開発が 10年程度と、組み込みソフトウェア開発が 3年程度です。ゲーム開発のプロジェクトではほとんどが C++ でしたが、一部、C言語のみでの開発もありました。組み込みソフトウェアの方はすべてC言語です。私が解説する内容は、知らず知らず、私が経験してきたことや、所属したプロジェクトでの事情に縛られているかもしれません。そして、私が経験していない分野の事情は、率直にいって私には分かりません。たとえば私に Web開発に関することを尋ねられても、良い回答はできません。

C言語とは 🔗

C言語は、プログラミングをするときに使う言語(プログラミング言語)の1つです。世の中にプログラミング言語は非常にたくさんありますので、プログラミングをするために必ずしもC言語が必要なわけではありません。

C言語の長所として、以下のような点が挙げられます。

  1. 実行速度のすぐれたプログラムを作りやすい(速度的な効率が良い)
  2. メモリなどの資源の使用量を抑えたプログラムを作りやすい(空間的な効率が良い)
  3. ほとんどの分野で使用できる(汎用的である)
  4. 情報が多くあり、開発をサポートするツールなども豊富にある(活発に使われている)

誤解を恐れず簡単にいえば、「性能が高く、ほとんど何でもできる」ということになります。もちろん、C言語は完璧なプログラミング言語だというわけではありませんが、幅広く仕事をこなせる言語であることは確かです。


一方、短所として、以下のような点が挙げられます。

  1. 機能がそれほど豊富ではなく、後継のプログラミング言語ならばごくわずかな記述で済むことでも、多くの記述が必要になることが多い
  2. コンピュータの仕組みに関して、ある程度知識が要求されることがある
  3. 間違ったプログラムに対する防衛策が乏しく、細部に注意を払わなければ、正常に動作するプログラムが書けない

プログラミング自体が初めての場合に、C言語を使うことを反対する意見がありますが、その理由とも一致します。プログラミングだけでなく、コンピュータへの理解も必要であることは学習コストが高いといえますし、ほかのプログラミング言語を使えば簡単にできることが、C言語では簡単にいかないことも多いです。何より、非常に簡単に間違ったプログラムを書けてしまう点が厳しいところです。

ですが、最初から「確実に正しい」方法を学ぶようにし、よくわからないままに適当な書き方をしないようにしていれば、そこまで恐れることはありません。ですから、最初のうちはきちんと体系的な入門学習をしたほうがいいと思います。そのつど調べて何とかするようなスタイルでは、なかなか正しいプログラムが書けるようになりません。C言語編は体系的な入門学習として使える教材を目指しています。


C言語は、非常に多くの分野で使われてきた実績のあるプログラミング言語ですが、近年では、組み込み系と呼ばれる分野や、OS などの開発での使用が中心になっています。2000年代ぐらいまでなら、ゲーム開発も代表的な分野でしたが、今では C++ や C# といったプログラミング言語に取って代われているといっていいでしょう(個人レベルでのゲーム開発での利用はありえます)。

また、実行速度に優れるため、製品の大半はほかの便利なプログラミング言語で作りつつ、速度が重要な部分だけをC言語で開発するといった、合わせ技を用いるケースもあります。

標準規格 🔗

C言語には、その仕様を詳細に定めた標準規格があります。大元になるのは、ISO/IEC という組織がまとめた国際的な標準規格です。それをさらに各国が自国の言語でまとめた規格もありますが、残念ながら日本の規格(JIS規格)は、1999年の C99 というバージョンに、そのあとのわずかな修正分を適応した「JIS X 3010:2003 プログラム言語C」[1]で止まったままです(2021年11月現在)。

2024年11月現在、制定されている国際標準規格は以下のとおりです(細かい調整が行われたタイミングがほかにもあります)[2]

名称 通称 (正式決定前の通称)
ISO/IEC 9899 :1990 C89 または C90
ISO/IEC 9899:1990/Amd.1:1995 C95
ISO/IEC 9899 :1999 C99
ISO/IEC 9899 :2011 C11
ISO/IEC 9899 :2018 C17 または C18
ISO/IEC 9899 :2024 C23 (C2x)
未定 (C2y)

正式名は長いので、通称がよく使われます。

C23 は予定通り 2023年度中に内容は定まっていましたが、2024年10月にようやく正式な国際標準となりました。

実際にC言語の標準規格に沿ったプログラミングをするには、コンパイラ(プログラミングに必要な道具の1つです)が、目的のバージョンの標準規格に対応できるかどうかが問題になります。「この標準規格の機能が使いたい」と思っても、使っているコンパイラが対応していなければどうにもなりません。


これからC言語を学習したり、プログラムを書いたりするにあたっては、基本的に新しいバージョンを選択すればいいです。新しいバージョンの方が機能が豊富であり、古いバージョンに存在した問題点が改良されていることもあります。

一方で、新しすぎるバージョンには現実味がない場合があります。新しい標準規格が出来たからといって、プログラミングに必要な道具が即座に更新されるわけではないからです。標準規格ができてから、実際にそのバージョンの機能が十分に使えるようになるまで、早くとも1~2年程度はかかるのが普通です。また、入門者が理解できるような情報が極度に少ないという問題もあります。

さらに、現実の開発現場に目を向けると、数年前に購入した開発環境を簡単に更新できなかったり、古いプログラムを保守する仕事があるといった理由から環境を新しくできなかったりすることがあり、プログラマー個人としては新しいバージョンに移行したくとも、それが許されないケースもあります。


C言語編は、C99 を解説のベースとして選択しています。解説をシンプルにするため、これより古いバージョンでの事情には触れません(前述したとおり、C89/95 経験者向けの補足を、本文とは切り離したところに入れます)。

開発環境について 🔗

ここでは、C言語編の解説のために使う開発環境についての説明をしておきます。

C言語編で登場するプログラムは、以下の環境で正常に動作することを確認しています。いずれも、更新プログラムのたぐいは、最新のものを適用します。リンクはそれぞれのダウンロードページへ移動します。

  1. Microsoft Visual Studio Community 2015
  2. gcc 5.6.0 (MinGW-w64)

当サイトでは、「Microsoft Visual Studio Community」は「Visual Studio」と表記します。「Microsoft Visual Studio Community 2015」は「Visual Studio 2015」と表記します。

Visual Studio、gcc は Windows 11 の PC で確認しています。

上記のいずれも、最新のものより数年古いバージョンを選択しています。これは当サイトの新C++編との統一のためです。これから学習を始める方は、上記のバージョンに合わせる必要はありません。素直に最新バージョンを選択してください。たとえば Visual Studio ならば、Visual Studio 2022 が最新です(2021年11月現在)。


Visual Studio は、Microsoft社製の統合開発環境 (IDE: Integrated Development Environment) です。Windows使用者は、これを選択すればいいでしょう。製品名に「Community」と付いているものは、条件を満たしていれば無料で入手・使用できます。個人の開発者であれば、条件に合致していると思われるので、これを検討すると良いでしょう。詳細は、Microsoft のサポートページでご確認ください

なお、Visual Studio は、C言語の仕様上はまったく問題のないはずのソースコード (source code) に対して、警告 (warning) エラー (error) を出すことがあります。

これは危険性がある場合に対策を促すものですが、学習には少々邪魔になるかもしれません(もちろん、本格的なプログラミングでは、危険性があるということは認識すべきです)。この辺りの詳細は、「Visual Studio編C4996警告」を参照してください。これ以外にも、Visual Studio に関する情報を Visual Studio編 でサポートしています。

参考リンク 🔗



更新履歴 🔗

≪さらに古い更新履歴≫

 VisualStudio 2015 の対応終了。

 VisualStudio に関する情報を今後、専用のページでサポートするために文面の調整を行った。
標準規格に関する記述を「標準規格」の項に分離。C17 に言及。

 メールアドレスを変更。

 VisualStudio 2013 の対応終了。

 「VisualC++」という表現を「VisualStudio」に統一。

 Xcode 8.3.3 を clang 5.0.0 に置き換え。

 clang 3.7 (Xcode 7.3) を、Xcode 8.3.3 に置き換え。

 C11 への対応を開始したので、それに合わせて文章を修正。

 paiza.IO の紹介を追加。

 VisualC++ 2017 に対応。

 clang の対応バージョンを 3.7、Xcode を 7.3 に更新。

 clang の対応バージョンを 3.4 に更新。

 VisualC++ 2012 の対応終了。

 VisualC++ 2010 の対応終了。

 VisualC++ 2015 に対応。

 clang 3.2 に対応。

 コンパイラに関する情報を、「開発ツールの情報」のページへ分離。

 VisualC++ 2013 に対応。

 VisualC++ 2008 の対応終了。

 clang 3.0 に対応。
VisualC++2012、2008 のリンク先を修正。
参考リンクの C11 のページを、日本語版のページに差し替え。

 C99 への対応について追記。

 VisualC++2012 に対応開始。

 C11 について追記。

 動作確認環境について追記。文章の一部を強調表示。

 「本編の内容について」を追加。

 参考リンクに「太田研究室 Visual C++ 2010 Express インストール メモ」を追加。
C言語の標準規格について補足。

 VisualC++2010 Express Edition に対応。

 VisualC++2010 Express Edition の公開を紹介。

 「この章の概要」を追加。

 新規作成。




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