C言語基礎
前回:C言語を組む前に!
次回:四則演算と変数

前回は「C言語を組む前に!」ということで、簡単な説明とプログラミング環境の準備を行ないました。今回はCygwin上に文章を出力してみましょう。

■プログラムの構造

前回、プログラムをコピーしてもらい、コンパイルと実行をしました。今回はまず始めにプログラムの構造について説明します。

C言語のプログラムの基本構造は以下の要素からなっています。

  1. 宣言する
    プログラム中にあらかじめ用意される機能ではなく、自分で用意したものを利用することを明記します。(宣言については次回、変数と一緒に説明します)
  2. 処理する
    プログラムに処理させる内容を記述します。
  3. 応答する
    プログラムの処理した結果を返します。

この順序でプログラムを書く必要があり、この順番でなければコンパイルする際にエラーとなります。コンパイルエラーについては本記事の最後に説明します。

■プログラムを書くために必要な作法

プログラムの基本構造を押さえた上で、前回のプログラムを再度見てみましょう。

//文字を出力する c1_1.c
#include<stdio.h>
int main(void){
    printf("C言語1-1:C言語を組む前に!\n");
    return 0;
}

 
このプログラムは「C言語1-1:C言語を組む前に!」とCygwin上に表示するプログラムです。自分で書いたものを出力しているだけの単純なものですが、C言語のプログラムを組む上で必要な作法が含まれています。

  • セミコロン「;」で区切る
  • 機能を利用する
  • 実行されるプログラムのコード(宣言する、処理する)
  • 応答する

ここで説明する内容は最初の知識では理解できません。ただしプログラム中に書かなければ動作するプログラムを組むことはできません。簡単に説明は書きますが、後になってからわかってくることなので、こういうものだと理解してください。

...;

 
C言語ではセミコロン「;」で1処理(1命令)と解釈されます。プログラムが長くなる場合、改行しても問題ありませんし、「;」で区切ってしまえば、1行に複数の処理を記述しても問題ありません。

#include<stdio.h>

 
この文言は別の機能を利用する際に記述します。stdio.hは、C言語のコンパイラで標準で(始めから)用意される入出力の機能を利用するための記述がされているファイルです。このように別に用意される機能(群)のことをライブラリといいます。このファイルをincludeという宣言をすることにより、作成中のプログラム(c1_1.c)に埋め込んでいます。今後、別の機能を利用する場合も同様にincludeによる埋め込み処理が必要となります。

int main(void){
    ...
}

 
プログラムを実行すると、int main(void){ … }で囲まれた部分が実行されます。main(void){ … }で囲まれた部分をmain関数と呼び、実行するプログラムは、main関数の中に書く必要があります。ただしプログラムを別に分け、main関数の中から呼ぶこともできます。先ほどのライブラリは、main関数の中から別に存在する機能を呼んでいます。

return 0;

 
プログラムを実行したらプログラムの結果を返す必要があります。Cygwin上では何も表示されませんでしたが、実は実行後に「0」という値をプログラムを呼び出した側(プログラムやOSなど)に返しています。この返す値を戻り値といいます。main関数の外の別機能を利用した際には、戻り値を取得して次の処理を判断する、また別機能で計算した結果を返す場合もあります。

ここまで説明したことは今後学習していく中で、詳細に理解できます。今はイメージだけで理解するだけで十分です。

■文字列の表現

プログラムのコードと値の文字列を区別するため、固定の文字列は「” “」で囲んで表現します。例えば「あいうえお」という文字列は「”あいうえお”」とします。ただし数値は囲みません。

文字列: "あいうabc"
数値: 1, 1.5, -1

 

■コメント

プログラム中にコメントを入れることができます。単行の場合は「//」の後がコメント、複数行の場合は「/* */」で囲まれた部分がコメントとなります。

// 単行コメント
/*
複数行コメント1
複数行コメント2
複数行コメント3
*/

 

■標準出力

今まではCygwin上に表示と説明してきましたが、このようにテキストメッセージを実行環境上に出力することを標準出力と呼びます。標準出力はデフォルトの出力先にテキストメッセージを出力する機能で、実行環境/実行元によって出力先は異なります。Cygwinやコマンドプロンプトなどのコンソール画面上で実行した場合は、ほとんどがコンソール上に出力されます。

標準出力する機能として、以下の2つの機能が用意されています。

stdio.h
int printf(const char* format, …))
          指定したフォーマットの文字列を標準出力に出力します。成功すると出力した文字数、失敗すると負値を戻り値として返します。
int puts(const char* str, …))
          指定した文字列を標準出力に出力します。出力する文字列の最後には改行文字が入ります。成功すると非負値、失敗するとEOFを戻り値として返します。

 
例:printf

//printf サンプル c02_1.c
#include <stdio.h>
int main(void){
    printf("printfを%d回、出力します。\n", 2);
    printf("printf %s、", "1回目!");
    printf("printf %s\n", "2回目!");
    printf("整数%d、小数%f、改行%s", 123, 4.56, "\n");
    return 0;
}

 
コンパイル、実行結果

$ export LANG=ja_JP.SJIS
$ gcc c02_1.c -o c02_1.exe
$ ./c02_1.exe
printfを2回、出力します。
printf 1回目!、printf 2回目!
整数123、小数4.560000、改行

 
printfはフォーマットの文字列を指定して標準出力を行います。フォーマットは通常の出力する文字列の中に変換指定という特殊な文字を入れて指定します。変換指定は別の値を代入することのできる文字で、後に指定する文字列や数字を代入します。変換指定は整数(%d)、小数(%f)、文字列(%s)などがあり、例のように「,」で区切って代入する値を指定します。また例中の\nは改行文字を示します。このような代替文字はエスケープ文字と呼ばれ、改行(\n)、”(\”)、'(\’)、\(\\)などがあります。

例:puts

//puts サンプル c02_2.c
#include <stdio.h>
int main(void){
    puts("putsを出力します。");
    puts("最後に改行\nされます。");
    return 0;
}

 
コンパイル、実行結果

$ export LANG=ja_JP.SJIS
$ gcc c02_2.c -o c02_2.exe
$ ./c02_2.exe
putsを出力します。
最後に改行
されます。

 
putsは最後に改行文字を付けて文字列の標準出力を行います。putsはprintfとは異なり、フォーマットを指定することができません。

■コンパイルエラー

プログラムが誤っている場合、コンパイル時にエラーが発生します。以下の例はprintfの最後に「;」を書き忘れたプログラムです。

例:コンパイルエラー(セミコロン無し)

//サンプル セミコロン無し
#include <stdio.h>
int main(void){
    printf("整数:%d\n", 123)
    return 0;
}

 
コンパイル結果

c02_3.c: In function ‘main’:
c02_3.c:5: error: expected ‘;’ before ‘return’

 
main関数の5行目のreturnの前に「;」が無いようですとコンパイラから言われています。このように文法や名前、構造に誤りがある場合、コンパイラのエラーとなります。エラーの内容は様々ですが、エラーの内容を元に対応をしてください。

次回は四則演算と変数について説明します。

C言語基礎
前回:C言語を組む前に!
次回:四則演算と変数



2 Responses to “C言語02:文章を標準出力してみよう”

  1. […] SE 6 (JDK 6 Update 21) のインストール C言語02:文章を標準出力してみよう 8月 […]

  2. […] C言語02:文章を標準出力してみよう 8月 10 […]

Leave a Reply

preload preload preload