C言語のはじめに


2016.11.4更新
プログラミングの前に、ブラインドタッチと、かな入力。
ブラインドタッチと、かな入力は、プログラミング以前の大前提としてできるようになって欲しい。
これができないと何をするにも効率が悪いです。
ローマ字入力で日本語を打つのは時間と労力の無駄。
かな入力でブラインドタッチを短期間でできるようになるかどうかはプログラミングの適性検査のひとつになると思います。
簡単なことを覚えられない人が難しいことを覚えられる確率ってどの程度でしょう。

C言語はUNIXの言語
C言語は元々、UNIXという。OSの言語です。
UNIXを作るためにC言語は作られました。
C言語コンパイラもC言語で作られています。
UNIX上の各ソフトウェアもC言語で作られています。

C言語のコマンド名cc
C言語はシェルコマンドライン(Windowsで言うならDOS窓)で cc と入力して使うのがオリジナルのC言語であるUNIXのC言語の使い方です。
ただし、UNIX Cでない場合は、ccではなく別の名前が普通です。
Windowsでは統合開発環境もあるため、GUIで操作して、直接コマンドを打つ必要はないかも知れません。
最も短いC言語のソースは8文字
main(){}
の八文字は最も短いC言語のソースです。
この八文字だけでコンパイルして作ったプログラムを実行することができます。
このプログラムは実行しても何もしません。

最も短いC言語のソースは8文字だったはずだが、
int main(void){return 0;}
環境によって、こう書かないとエラーとかワーニングがでるかも知れない。
ワーニングというのは、警告とも言ってコンパイルはできるけども、もしかしたら良くないかも知れないという意味。
無視していい場合も多いです。
C言語も時代と共に変わりつつあり、だんだんチェックが厳しくなっていっている。
ワーニングが出ても問題ないと分かっている場合は気にしなくていいです。
ワーニングを出すコンパイラのほうが間違っていることもある。

C++との互換性
C++はC言語の上位互換があります。
C言語のソースをC++コンパイラでコンパイルして実行できるということです。
完全な上位互換はないですが、完全互換と思っていて問題ないほど互換性があります。
ただしC++はC言語の単純なバージョンアップではなく、C言語とは全く違う考え方で拡張された別言語です。
C++でプログラムを作る場合、旧来のC言語風の記述で書くか、新しいC++風の記述で書くか、C言語風とC++風をミックスさせるかという悩ましい選択をする必要があります。
新しい書き方のほうが良いとは限らないので悩んでしまいます。

コンパイル方法
オリジナルのC言語であるUNIX Cでは、ccというコマンド名です。
「cc ファイル名」とコマンドを打ってコンパイルします。
例えば test.c というファイル名なら、
cc test.c
と入力します。
成功すれば、UNIX Cでは、a.out というファイル名のプログラムを出力します。
Windowsの場合、コンパイルしたファイル名の拡張子をexeに変えた名前のファイル名を出力するコンパイラが多いです。
この場合では、test.c ですので、test.exe のように。
実際にはコマンドオプションが必要だったり、ファイルが複数あったりとこんなに単純には行かないことが多いですが。
C++ Builderでは、ccではなく、bcc32や、bcc32c、bcc64などのコマンド名になります。
GNU Cでは、gccというコマンド名。
Clangでは、clangというコマンド名。
Visual C/C++では、clというコマンド名。
多くのUNIXライクOSのC言語コンパイラでは、cc というシンボリックリンクよる別名がついている場合が多いです。
例えばgccに、ccという別名が付いているように。
ファイル名の拡張子には通常、.c を付けます。
C++では拡張子には、.cc または .cpp を付けるのが一般的です。(Windowsでは.cppが一般的)
実際には、どんな拡張子を付けてもコンパイルはできます。
ファイルの数が増えて来ると自動的に必要なファイルだけ(タイムスタンプを見て更新されているファイルだけ)コンパイルするために、make というコマンドでコンパイルするのが伝統的なやり方です。
統合開発環境(IDE)を使う場合はmakeを使わないもしくは直接使いません。

C++以外のプログラム言語との互換性
今、主流の言語は大概少しはC言語と互換性があります。
大概の言語はC言語を参考にしてまねているからです。
C++以外ではObject Cや、D言語ではC言語と互換があるようですが詳しいことは知りません。
Object CはアップルのOS(Mac OS X、iOS)の標準言語です。
JavaやC#などのほとんどの言語は、C言語と高い互換性はないのでC言語のソースの一部をC++以外の言語にコピペしてもそのまま動くことはないでしょう。
Java、Javascript、C#、PHPなどは、C言語のif else while switchなどの構文が使えます。
PerlもifやwhileがC言語の関数はprintfなら使えます。
PHPは、printfの他、strstr、strcmp、fopen、fgetsなどの多くのC言語の関数が使えます。
C言語を知っていれば、他の言語も理解しやすいです。

最初は、DOS窓テキストエディタでやればいいと思う。
最初は、GUI統合開発環境(IDE)をするのはあまりおすすめしない。
WindowsならDOS窓とテキストエディタでやったほうがいいんじゃないかと思います。
そのテキストエディタも、vim(gvim)がいいんじゃないかと。
Mac OS X、GNU/Linux、FreeBSDなら、ターミナルとテキストエディタ vi または vimでいいと思う。
統合開発環境の使い方を覚えて行くことに時間を取られては先に進めないし、
C言語というものは元々、DOS窓やターミナルでやるもので、標準関数にはDOS窓やターミナルに文字を表示したり、DOS窓やターミナルから文字を入力する関数しかない。
ウィンドウを操作するとか絵を表示するとかは、C言語の標準関数ではできない。
もちろん標準でない各OSや各開発環境固有の方法ではできるんだけど、まずは標準機能から入るべき。
C言語はコマンドラインの知識も含めてC言語だと思います。
コマンドラインが分かってないとC言語も分かってないと言えると思います。
テキストエディタのviは癖があるので取っつきにくいと思いますが、これに勝てるエキストエディタはないと思います。

何もインストールしないで今すぐやる方法
何もインストールしないで今すぐやる方法としては、
https://paiza.io/という各種プログラミング言語を使えるサイトでウェブブラウザ上で入力と実行する方法があります。
これで作ることができるプログラムは限られます。
作ったプログラムの実行は2秒で強制終了。
2秒で強制終了されるのでは入力待ちさせるプログラムは作れない。
多分ファイルをプログラムで作成しても2秒後には消されるんだと思う。
理想的には永続的なディスク容量を割り当てられて、シェルや各種UNIXコマンドが使えるレンタルサーバーのような形で且つ、C言語コンパイラも使えればいいんですがそうではありません。
しかしながら使ったことない言語をほんの少し試してみたいという用途では使えると思います。

開発環境は何をインストールすればよいのか
入手方法、インストール方法、設定方法、使い方が分かって使えるのならなんでもいいと思います。
本格的なプログラムを作るような段階ではなんでもいいというわけにはいかないでしょうが。
最新のC++ Builder 10.1 BerlinのStarter Editionが今は無料ですのでおすすめです。
WindowsではあとはMinGWとか、
UNIXライクの環境ごと入れるならCygwin入れるとか、
VirtualBoxUbuntuなどのGNU/Linux入れるとか。
Visual Studioで、GUI操作でVisual C++を使う方法もありますが、#include "stdafx.h" とか、_tmain とか _TCHAR とか、一般のC言語とは違う記述が出てきたりします。
Mac OS Xは簡単でXCodeをダウンロードして、ターミナルでcc というコマンドで使えます。
MingwとかGNU Cコンパイラ(gcc)は、作ったプログラムを配布する場合はリンクするライブラリによりGPLとか、LGPLのライセンスに従う必要があります。

字下げ(インデント)
#include <stdio.h>
main(){int a;a=1;if(a==1){printf("abc"):}}
と書いても動作するのですが、読みやすいように、
#include <stdio.h> main() { int a; a=1; if(a==1){ printf("abc"): } }
のように書くのが字下げです。
よいとされる字下げの方法は趣味や事情により、人によって意見が異なります。
viエディタを使っている場合は]]と、[[コマンドが使えるように関数の先頭の{ は行頭に書くほうがいいです。
このコマンドは前後の関数の先頭に跳ぶコマンドですが行頭の{ を関数の先頭と判断しているからです。
a=1; ではなく、a = 1;と書くほうがいいという考えのほうが多分主流です。

とりあえずこれをincludeしとく
#include <stdio.h> #include <stdlib.h> #include <string.h> main() { }
のようにソースの先頭にこの三行のinclude文を書いておくといいです。
必要になってから書いてもいいんですが、必要になる前にincludeしておいて特に何も問題はありません。
C言語の関数を全く使わず、C++ライブラリだけを使う場合は書かなくていいですが、書いても特に困ることはありません。
しいて言うと余計なincludeをするとコンパイル時間が理論上は余計にかかります。
体感できないと思いますが。

C言語超入門1に進む


C言語の話


あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ