はじめに
前回以下で、クラウド開発環境PaizaCloudクラウドIDE(ここからはPaizaCloudと書きます。)の無料版での導入について書きました。
クラウド開発環境PaizaCloudクラウドIDEのすすめ
このPaizaCloudではプログラム開発環境もいろいろと最初から導入されているので今回はC言語のいわゆる Hello World プログラムを動作させてC言語の特徴等を整理してみます。初学者の方々を対象にして書きました。
C言語の特徴
- 手続き型プログラミング言語でコンパイルが必要
- システムプログラミング向け(OSや組み込み系など)
- 高速・軽量、ハードウェアに近い制御が可能
- ポインタ操作やメモリ管理が必要(手動)
C言語の主な用途
- 組み込み開発、OS開発、ドライバ、下位レベル(ハードウェアやOS寄り)の制御
それでは実際にHello Worldプログラムを書いてみます。
C言語でHello World
前回の準備が出来ている状態とします。
ターミナル(黒い画面)を使います
プログラムの編集というかエディタの起動からの操作はマウスでも出来るのですがここではターミナルを使います。この通称「黒い画面」に苦手意識がある方もいらっしゃるとは思いますが、ここでの環境は自分自身だけの環境になるので大丈夫です。もし変な状態になったと思ったら右上のxで強制終了させればいいです。
nanoエディタで編集する
そのターミナル(黒い画面)をPaizaCloud画面の左上のターミナルアイコン(黒いやつ)から起動します。
以下のように入力してHelloWorld.cの編集を始めます。(別にファイル名は何でもいいですがその場合はここからのHelloWorld.cのファイル名を読み替えてください。)
$ nano HelloWorld.c
以下のC言語プログラムを入力します。
#include <stdio.h>
int main(int argc, char argv[])
{
printf("Hello World!\n");
return 0;
}
Hello World!のメッセージ部分も何でもいいです。
入力が出来たら保存して終了します。ctrlキー+s から ctrlキー+x での保存がおすすめです。
コンパイル・リンク(ビルド)を実行する
nanoエディタを閉じた状態で以下を実行してください。gccというコマンドを使います。
$ gcc HelloWorld.c
入力ミス等がなければ以下のように a.out というファイルが出力されます。
これがHelloWorldプログラムの実行ファイルなのでこれを以下のように実行します。(./ はカレントディレクトリを指定しています。)
$ ./a.out
a.outではなくて別の名前の実行ファイルを出力する場合は以下です。
$ gcc HelloWorld.c -o HelloWorld
-oで実行ファイル名を指定します。問題なければ指定した実行ファイルが出力されます。それも a.out と同様に実行できます。
以上でC言語でのHelloWorldプログラムの実行まで出来ました。
C言語の解説をしてみます
ここまでのHello Worldを踏まえてあらためてC言語の解説をしてみます。
構文的・文法的特徴
-
関数単位で処理を構成
-
エントリーポイント(一番始めの処理)は
main()
関数 -
実行可能なコードは関数の内部に記述
-
関数のネスト定義(関数の中に関数)は不可
すでに用意されている標準関数(標準ライブラリ)がある
関数の単位で処理を作成して標準関数も含めて全体の処理を実現
この関数をどう設計するかが重要
オブジェクト指向の機能はC言語としてはない
-
-
中かっこ
{}
でブロックを明示的に囲む-
制御構文(
if
、for
、while
など)や関数定義で使用 -
複数行の処理には必須
-
1行の場合は省略可能だが、明示的に
{}
を使うのが推奨される結構自由に書けるので他人が見やすいことも意識する必要あり
-
-
セミコロン
;
で文(statement)を区切る-
各命令文の末尾に
;
を付ける必要がある -
制御構文の条件部や関数定義の
{}
の後には不要これも結構自由に書けるので他人が見やすいことも意識する必要あり
-
-
型宣言が必須
-
静的型付け言語であり、すべての変数や関数に型を明示する必要がある
-
例:
int x;
,char c;
,float y;
いきなり x = 0; とは書けない
-
-
プリプロセッサ指令を使用
-
コンパイル前に処理される命令
-
#include
:ヘッダファイルの読み込み -
#define
:定数やマクロの定義 -
その他:
#ifdef
,#ifndef
,#endif
などの条件付きコンパイルヘッダファイルは各種宣言、定義が含まれるファイル
-
補足的に
コンパイル・リンクとビルドについて
C言語は通常コンパイル言語に分類されます。(コンパイル言語に対してはスクリプト言語があります。)そのための手順が必要となります。そこを補足します。
- コンパイル
ソースプログラムをコンピュータが理解できる形式(オブジェクトコード)に変換する処理。 - リンク
バラバラのオブジェクトコードを結合して実行形式ファイルを作成する処理。 - ビルド
コンパイルとリンクを合わせた一連の処理。
より詳細は以下の記事が参考になると思います。(先人の投稿のお力をお借りします。ありがとうございます。)
【初心者向け】コンパイル?リンク?ビルド?それってなんなんだ!を解決したい
includeはおまじないじゃないよ
このC言語の Hello World プログラムではよく最初の一行目はとりあえず「おまじない」としておきましょうと言われることがあります。
確かにこのあたり説明すると長くなるとは思いますが、「おまじない」としておくのはどうかと思います。実際に今回のHello Worldプログラムの一行目を削除するとコンパイルエラーになります。
そこでですが、また先人の投稿のお力をお借りします(ありがとうございます)。以下の記事でよく説明されています。C++でのHello World解説ですが、おまじないという言葉とincludeからプリプロセッサに関する説明があります。
ハローワールド徹底解説
C言語を学習する意味はあるのか
プログラミングの勉強を始めようと考えている方には有力な選択肢の一つだと思います。
C言語でオブジェクト指向を含まないプログラミングを学習してその後にC++へ進んだり、他の言語へ進むのはステップアップのバターンの一つだと思います。
実務的にはどうなのかということであれば、最初の方で書いたC言語の主な用途で書いた分野では必須です。
さいごに
全体的に長くなったかなと思ったのですが、どうやらQiitaの記事の長さは人それぞれだと思いました。
また他の言語のことやC言語とC++についてなど書ければと思います。ありがとうございます。