C言語は関数で成り立っています.つまりある関数を実行することである仕事をするプログラムとも言えます.関数一つ一つは大した事をしませんが,それらの関数をあるアルゴリズムで並べることにより複雑な仕事をします.
例えば printf() という関数は見た目には文字を画面に表示するという仕事しかしませんが,この関数を使用することにより画面に表示するプログラムを自分で書く必要が無い(画面に文字やグラフを書くのは結構面倒なんですよ)ばかりか,プログラム的にも非常にすっきり見えることになります.
さて一番基本中の基本のC言語でのプログラムが「Hello!」プログラムです.このプログラムはK&Rの著書でも一番最初に出てくるプログラムです.
| Program 1-1 |
|---|
void main( void )
{
printf("Hello!") ;
}
| Program 1-2 |
|---|
void main( void )
{
int i , kotae ;
for ( i=1 ; i==100 ; i++ ) {
kotae = y(i) ;
printf("%d \n" , kotae ) ;
}
}
int y ( int x )
{
int ans ;
ans = x*2 + 10 ;
return ( ans ) ;
}
[記憶クラス][型指定]関数名([引数])
{
関数の中身}
記憶クラスには static(静的変数)と extern(外部変数)のどちらかとなります(後述). 省略をするとexternとして処理をされます.
型指定は配列型と関数型(他で宣言した関数?)以外は使えます(後述).省略をするとint型として処理をされます.
関数名は自分でわかりやすい関数名を付けてください.但し既にC言語のライブラリで登録されている名前は付けられません.出来ればアルファベットとアンダーバー _,ハイフン - 等で関数名は付けたほうが無難です.
引数は定義した関数にどんな値をどれだけ渡すのかを表記します.別段渡すものがなければ書く必要はありませんが,何も引数が無いことを明示しておくために void と表記しておくのがいいでしょう
関数の中身については { と } の間で囲まれた部分に記載します.
まぁ細かいことは徐々に勉強をしていきましょう.
| Program 1-3 |
|---|
#include "stdio.h"
int y( int ) ; ← ※
void main( void )
{
int i , kotae ;
for ( i=1 ; i==100 ; i++ ) {
kotae = y(i) ;
printf("%d \n" , kotae ) ;
}
}
int y ( int x )
{
int ans ;
ans = x*2 + 10 ;
return ( ans ) ;
}
| Call by Value |
|---|
A B
+---------+ +---------+
| [ 1 ]--|---------------|->[ 1 ] |
+---------+ +---------+
+---------+ +---------+
| [100]--|---------------|->[100] |
+---------+ +---------+
実際にプログラムの関数で見てみます.Program 1-3 を見てみましょう.この時 main 関数は y() という関数に変数 iを通じて 1〜100までの値を渡しています.
| Call by Refrence |
|---|
A B
| |
| +---------+ |
+------>| Addres |<------+
+---------+
A
| +---------+
+--->| [ 1 ] |
. +---------+
. +---------+
+--->| [100] |
+---------+
この方法はポインタと言われる方法で,少々概念的に難しいかもしれません.| Program 1-4 |
|---|
#include "stdio.h"
int y( int * ) ; ← ※(1)
void main( void )
{
int i , kotae ;
for ( i=1 ; i==100 ; i++ ) {
kotae = y( &i ) ; ← ※(2)
printf("%d \n" , kotae ) ;
}
}
int y ( int *x ) ← ※(3)
{
int ans ;
ans = (*x) * 2 + 10 ; ← ※(4)
return ( ans ) ;
}
| 外部変数渡し |
|---|