表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
4/7

「いんすう」って呼ばないで! 関数概略

 今回はコード少なめなのでご安心を。


 つーことで早速今回のコードを載せます。

--------

#include <stdio.h>


int add(int a1,int a2);


int main(){

int a = 1;

int b = 5;

int c = add(a,b);

printf("a=%d:b=%d:c=%d\n",a,b,c);

return 0;

}


int add(int a1,int a2){

return a1 + a2;

}

--------

 はい、短いですね。

 今回は「関数」の使い方についてです。

 細かいことを言えば深くなるのですが浅いことには定評のある筆者なので浅く触れていきます。


 まず一行目のincludeは無視します、いつものアレです、おまじない。

 で、重要なのが

int add(int a1,int a2);

 です。

 じつは下の関数本体をここに書けばこれ要らないです。

 じゃあなんでわざわざこんな書き方をしたかというと、「読みやすい」からです。


 自分しか読まないコードでも数日それを見ないだけで、「アレってなんだっけ?」となります。

 格言に「3日前の自分は他人」というような意味のものもあります。

 ですから将来のために「お行儀のいい」コードを書きましょう。


 では解説。

 addという名前から想像がつく通り括弧内の2つの数を足して返す関数です。

 下の方にある本体の

return a1 + a2;

 が与えられた(今回はaとb)を足したものを返して今回はcに代入しています。


 皆さんの予想通り実行結果はこうなります。

--------

a=1:b=5:c=6

--------

 というわけでaの1とbの5を足した数をcに入れてそれを表示しています。

 ちゃんと1と5を足した数が入っているのが解ると思います。


 ここで横着な人は

c = a + b;

じゃ駄目なの? という疑問だと思います。

 それは今回については全く持ってごもっともな指摘であり、今回は関数化する必要はないです。

 じゃあ足す数が10個あってそれを5回行う場合どうでしょうか?

関数本体はこうなります。

-------

int add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){

return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9;

}

-------

 こうなります。

 で、呼び出しは、

-------

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

-------

 こうなります。

 直接書くと

------

c = a0 + a1 + ....

-------

 書くのが面倒になりましたのでどちらが楽かは賢明な読者の皆様に委ねます。

 というわけで、みなさんももっと楽をするために関数化をしましょうね!

[hirokazu@sisters 4]$ vim AnP.txt

[hirokazu@sisters 4]$ cat AnP.txt

 今回はコード少なめなのでご安心を。


 つーことで早速今回のコードを載せます。

--------

#include <stdio.h>


int add(int a1,int a2);


int main(){

int a = 1;

int b = 5;

int c = add(a,b);

printf("a=%d:b=%d:c=%d\n",a,b,c);

return 0;

}


int add(int a1,int a2){

return a1 + a2;

}

--------

 はい、短いですね。

 今回は「関数」の使い方についてです。

 細かいことを言えば深くなるのですが浅いことには定評のある筆者なので浅く触れていきます。


 まず一行目のincludeは無視します、いつものアレです、おまじない。

 で、重要なのが

int add(int a1,int a2);

 です。

 じつは下の関数本体をここに書けばこれ要らないです。

 じゃあなんでわざわざこんな書き方をしたかというと、「読みやすい」からです。


 自分しか読まないコードでも数日それを見ないだけで、「アレってなんだっけ?」となります。

 格言に「3日前の自分は他人」というような意味のものもあります。

 ですから将来のために「お行儀のいい」コードを書きましょう。


 では解説。

 addという名前から想像がつく通り括弧内の2つの数を足して返す関数です。

 下の方にある本体の

return a1 + a2;

 が与えられた(今回はaとb)を足したものを返して今回はcに代入しています。


 皆さんの予想通り実行結果はこうなります。

--------

a=1:b=5:c=6

--------

 というわけでaの1とbの5を足した数をcに入れてそれを表示しています。

 ちゃんと1と5を足した数が入っているのが解ると思います。


 ここで横着な人は

c = a + b;

じゃ駄目なの? という疑問だと思います。

 それは今回については全く持ってごもっともな指摘であり、今回は関数化する必要はないです。

 じゃあ足す数が10個あってそれを5回行う場合どうでしょうか?

関数本体はこうなります。

-------

int add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){

return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9;

}

-------

 こうなります。

 で、呼び出しは、

-------

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

add(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

-------

 こうなります。

 直接書くと

------

c = a0 + a1 + ....

-------

 書くのが面倒になりましたのでどちらが楽かは賢明な読者の皆様に委ねます。

 というわけで、みなさんももっと楽をするために関数化をしましょうね!


 ところで、気づいた方もいるでしょうがmain()も関数の一つなんですね。

 言語によっては1行目から実行されるものもありますがCではmain()から始まります。

 main()には引数(ひきすう)は無いの? と思われるでしょう、実はあるんです。

 悪名高いポインタが絡んでくるので今までは省略していました、正式に書くとmainはこうなります。

-----

int main(int argc, char *argv[])

-----

 はい、わかんないですね。

 一応説明しておくとargcには与えられる引数の数、argvには引数のポインタが入っています。

 でもmainにどこから引数を与えるの? という疑問が生まれますね。

 答えは実行時に与える。です。

 コンパイルして出来たのがa.outだったらこのように与えます。

-----

./a.out helloworld

-----

 これでhelloworldという引数を渡しています。

 なんでスペース入れないんだよ読みにくいだろ! という意見もあるでしょうがスペースを入れるとそれが区切りになってhelloとworldという2つの引数になるんですね。

 一応参考までに引数を与えるhelloworldも書いておきます。

-----

#include <stdio.h>

int main(int argc, char *argv[]){

printf("%s\n",argv[1]);

return 0;

}

-----

 これだけです、実行にはコマンドで「./a.out helloworld」と実行すると

helloworld

 と表示されます。

 注意するところはargv[0]には実行ファイルの名前が入るのでargv[0]は「./a.out」が入ってます。

 以上、関数入門でした。

main()の引数に関してはポインタに踏み込むので厄介事を避けるため今回は「へーこうなるんだ」くらいに思っておいて深く考えないほうがいいでしょう。

 お読みいただきありがとうございます!


評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ