C言語を使っていますか?
長年、システムエンジニアをしてきても、C言語での開発には携わるケースはあまりありませんでした。
中途半端に身に付けたC言語は、すっかり真っ白な状態になっています。
学生の頃、はじめてC言語でプログラミングをしたときのことを思い出し、また妙にC言語でプログラミングをやりたくなりました。
本棚に残っていた古いいテキストを取り出し、再挑戦をしようと決めました。
そのテキストとは、あの古書である協立出版社の「プログラミングC 第2版」(B.W.カーニンハン、D.M.リッチー薯)「The C Programming Language」です。
やっぱり、C言語はおもしろい!
複数に分けて、C言語学習の奮戦記を記録しながら、C言語でプログラミングをする愉快さと可能性を紹介していきます。
C言語の歴史

C言語は、1972年にベル研究所のデニス・リッチー(Dennis Ritchie)氏らによって開発されました。
当初は、UNIXオペレーティングシステムの移植性を向上させるためのツールとして設計されました。
C言語の設計は、1960年代のALGOL、BCPL、B言語などの影響を受けています。
特に、B言語を基盤にして作られたことから、「C」と名付けられました。
C言語は、システムプログラミングやオペレーティングシステムの開発に適した高いパフォーマンスと柔軟性を持っています。
その後、1980年代にANSI(米国国家規格協会)によって標準化され、「ANSI C」として知られるようになりました。
現在では、C言語はさまざまなプログラミング言語の祖先と見なされており、C++、C#、Java、Objective-Cなど、多くの現代の言語に影響を与えています。
C言語のシンプルさと効率性は、今もなお多くのプログラマーに愛され続けています。
ANSI標準規格とは

ANSI(米国国家規格協会、American National Standards Institute)は、アメリカ国内で標準規格の策定と承認を行う非営利団体です。
1918年に設立され、産業界、政府、学術機関などの幅広いステークホルダーと協力して、技術標準、製品規格、手順などの標準化を推進しています。
ANSIの標準規格は、製品やサービスの品質、安全性、互換性を確保するための基準を提供します。
これにより、異なるメーカーや業界間での一貫性と信頼性が向上し、市場における公正な競争と消費者保護が促進されます。
ANSI規格は国際的にも広く認知されており、多くの場合、ISO(国際標準化機構)やIEC(国際電気標準会議)などの国際規格とも整合性を保っています。
特に注目されるのは、プログラミング言語Cの標準化です。
1983年、ANSIはC言語の標準化プロジェクトを開始し、1989年にANSI C(ANSI X3.159-1989)として正式に標準化されました。
この標準化により、C言語の仕様が明確化され、異なるプラットフォーム間での互換性が向上しました。
ANSIの活動は、技術革新と経済発展を支える重要な役割を果たしており、今後も標準規格の策定を通じて、様々な分野での進歩と発展に貢献し続けるでしょう。
C言語の特徴

C言語は、関数の集合で構成されています。
関数とは、ある目的の作業を行い、結果を返してくれるものであります。
その関数を使用するために、プログラムの最初に関数が登録されているヘッダーファイルというものを宣言します。
例えば、C言語には、COBOL言語のように入出力命令(READ、WRITE)などなく、宣言したヘッダーファイルのライブラリ関数を使用して、入出力処理を行います。
また、もともとC言語はUNIXのOSやコンパイラを記述するのに使われ、「システム・プログラム言語」と呼ばれています。
今では、小型から大型コンピュータなど幅広くC言語は使用されています。
移植性にすぐれた汎用的なプログラム言語であるといえます。
C言語の構文

main関数に戻り値やvoidを指定するのはいつからですか?
C言語の構文でmain()
関数に戻り値(例えばint
)やvoid
を指定するのは、ANSI C標準(別名C89またはC90)からです。
ANSI C標準は1989年にアメリカ国家規格協会(ANSI)によって制定され、その後、国際標準化機構(ISO)によってISO/IEC 9899:1990として採用されました。
この標準によると、main()
関数の戻り値の型はint
であるべきとされています。
つまり、main()
関数はオペレーティングシステムに整数値を返す必要があります。
標準に従った例は以下の通りです。
int main(void) {
// コード
return 0;
}
または
int main(int argc, char *argv[]) {
// コード
return 0;
}
void
を戻り値の型として指定する例:
void main(void) {
// コード
}
これはANSI C標準に準拠していませんが、一部のコンパイラでは受け入れられることがあります。
しかし、移植性や標準への準拠を考慮すると、main()
関数の戻り値の型としてint
を使用することが推奨されます。
本記事で使用するテキストは、このバージョン以前のものですが、こちらの規約を使用します。
C言語の基本の構文
まず、関数であるprintfを使用するので、ヘッダー・ファイル「stdio.h」(標準入出力ライブラリ)の情報を取り込みます。
ここでは、printf関数を使用しています。
main関数は、必ず先頭に記述する関数です。
main関数の「int」は、戻り値の属性(整数型)です。
voidは、引数が無いことを示します。
以下は、「Hello, World」と表示する簡単なプログラム例です。

実行してみます。

使用するコンパイラやエディタについて

C言語を学習するには、コンパイル環境の準備しなければなりません。
Linuxの種類である、Cygwinを使用します。
Cygwinとは、Windows 上でLinux ディストリビューションと同様の機能を提供する GNU およびオープン ソース ツールの大規模なコレクション であります。
実質的な POSIX API 機能を提供する DLL (cygwin1.dll)です。
エディタは、サクラエディタとVisual Studio Codeを使います。
まとめ

C言語は、C++やC#の元祖となりますので、とても重要です。
C言語をしっかり身に付けることは、WEB系やゲームアプリやAIの開発にも柔軟に対応できるようになります。
それでも近道は禁物です。
じっくり学び、複雑化する社会に対してコンピュータ言語で対応していきたいですね。
未来のコンピュータメカニズムに対応してくためにも、C言語を学習することは大切とされるはずです。
進化するC言語の元祖を見直し、リベンジすることにしました。
コメント