キーワード:#AmaProgramming 解除
ちょっと間の空いて、前回何ばしたっかきゃー忘れっしもーたばえ。

あ、思い出した。
特殊文字んエスケープだったですね。
特殊文字ば出力すっ時は、\マークばつけんばんて話やったですね。

さーて、ほんなら今回は何ばすっかて言えば、文字列と文字についてゆっかせますよ。

文字列と文字、どぎゃん違うかて言えば、文字列は文字の集合で文字は1文字です。
そんだけ。

・・・こっじゃおどかですね。

実際の意味もそぎゃん感じですばってが次のプログラムば書いてみてくだっせ。
#include <stdio.h>

int main(void)
{
printf("文字は'%c'で、文字列は\"%s\"です。\n", 'A', "A");
return 0;
}
プログラム名は「ampro007.c」とでもしとくですかね。

早速前回でゆっかせた事ばしとるですね"ば表示するために
\でエスケープしとるです。

まぁ、それは今回はどげんでんよかとです。
%cと%sっていうとがわからんですかね?
printfは%ばつけて指定すればそん指定の形式で文字とか数字ば表示でくっとやったですね。
整数ば表示すっときは、%dとか書いたですね。
%cは何ば表示するときかって言えば、「文字」ば表示すっ時です。
で、%sは「文字列」ば表示すっ時に使います。

じゃあこっばコンパイルして実行してみましょうか。ampro007-01

きちんと出てきたですね。

さて、printfの2番目と3番目ば見てください。
「文字」は'A'、「文字列」は"A"って表現しとりますね?

囲み文字(引用符)が「文字」の場合はシングルクォーテーション「'」、
「文字列」の場合はダブルクォーテーション「"」で囲むとです。
あ、わかりやすくするために表示の時も引用符で囲んどるばってが
表示では別に囲む必要なかですよ。
printf("文字は%cで、文字列は%sです。\n", 'A', "A");
って書けば
文字はAで、文字列はAです。

って出てきますけん。
ただ、わかりにっかけん表示の時も引用符ばつけただけです。

こっば見てから
「なんな、こんなら別に文字も文字列として表現してよかもね。」
って思ったしーも多かとじゃなかでしょうか?

そっがそぎゃんワケにゃいかんとです。

C言語には「文字列」ば代入するための型のなかとです。
だけん、文字列ば変数に入れるなら文字数分の変数の必要になってくっとです。

今回は短かばってがこれだけです。

文字列ば保存する場合は通常は変数の配列ば使うとばってが、
変数の配列については何もゆっかせとらんかったですね。

だけん次回に変数の配列についてゆっかしゅーどもとります。

そんなら、また。
そんなら今回も張り切ってみゆーかぃ。

前回は計算方法と計算結果とかばコンソールに(画面)に
出す方法ばゆっかせました。

今回は文字列についてゆっかしゅーどもとります。
「文字列」っていうとはそん名前どおり、文字の並んだ列ば言うとです。
早か話が一文字に対して複数文字(単語とか)ば文字列っていうとですね。
文字列以外によか表現ばしきらんけん、しよんなかですけど。

文字列は「"」で囲んで表示させんばつまらんとですけど
こん「"」は何ていうか知っとるですか?
「ダブルクォーテーション」って言うとです。

まぁ、"の読み方はどげんでんよかつばってがばってが、
前回「エスケープシーケンス」っていうとばゆっかせましたね?
改行とかになる特殊な文字んこつですたい。

で、そんエスケープシーケンスばってんがアタマに
\(¥か\どっちに見えるかは環境による)ば、つけるとですけど、
例えばこん\そのものば表示したかときはどげんするですか?

puts("\");って書くですか?

実際にかいてみゅーかいね?
#include <stdio.h>

int main(void)
{
puts("\");
return 0;
}
プログラム名は「ampro006.c」ってしてみゅーだ。

で、コンパイルばしてみてください。

・・・ぎゃんなってコンパイル通らんでしょ?
ampro006-01

何でかって言えば\はそん次に来る文字ばエスケープするとです。
どぎゃん意味かって言えば、こっで例えるならば、文字列として囲んどる
「"」の囲み文字(引用符)としての機能ばエスケープ(逃が)して、
ただの文字として扱うごつするってこつです。

エスケープされた「"」は、ただの文字としての意味しか持たんごつなるけん
文字列ば囲むための「"」がそん後ろになかごつなって、コンパイラの
「こりゃおかしか!」っていうて、エラーば出すとです。
\マークにはそぎゃん機能のあっとです。

ただ、\の次に来る文字は何でんかんでんエスケープでくるかって言えば
そぎゃんじゃなくて、エスケープでくっとは決まっとるとです。
だけん、エスケープでけん文字ば\の次に書けばエラーになっとた。

\nは改行っていうたばってがこればエスケープシーケンスっていうたですね。
エスケープシーケンスは文字として表せん特殊な機能ば持っとるけん
そんエスケープシーケンスから取って「エスケープ」て言うとかは知らんばってが
色々とググッたら「エスケープする」とかっていう表現の出てくるけん
おそらくそぎゃん意味じゃろて思うとです。

そんならこん\ば出すにはどぎゃんすればよかて思うですか?
\の持つ機能ばエスケープすればよかけん

puts("\\");

で、よかはずですよね?
そんならぎゃんふうにコンパイルして実行してみてください。
#include <stdio.h>

int main(void)
{
puts("\\");
return 0;
}


\の表示されたですね。
\の表示されとる人は¥に読み替えてください。
ampro006-02

もし「"」ば文字として出力したか場合は
puts("\"");
ってすればよかですね。

これはどぎゃん時も同じですけん、printf関数でもそぎゃんやって表現でくっとです。

ただし、printf系関数(sprintfとかfprintf他vなんちゃらprintf)は
%も特殊記号として扱わるるですね。
あって、%dで整数ば表示したもね。

printf系の関数で%ば出力したか場合は\%じゃなかですよ?
%%って%ば2個書けばよかとです。
printf("天草弁100%%\n");
こっが出力結果は「天草弁100%」ですね。

どぎゃんでしょうか?文字列の癖はなんとなくわかったですか?
こりゃC言語での表現ばってが、他んC言語系の言語でも大体
似たごたる感じじゃあるて思います。

前回がごちゃごちゃしすぎたけん、今回はこの辺でよかですかね。

まだ何ばすっか決めとらんばってんが、また次回に!
どうも、だいぶ慣れてきたですかね。
前回は文字の表示とか標準ライブラリとかについて
ちょっとゆっかせたですね。

今回はいよいよ計算するプログラムば書こうて思います。
Vol.004あたりでちょろっと変数とかデータ型の話ばしたばってが
そん変数ば使います。
じゃあ早速書いてみゅーかね。
#include <stdio.h>

int main(void)
{
int a;
a = 100;
printf("a=%d\n", a);
return 0;
}
プログラム名は「ampro005.c」とでもしてみようかて思います。
で、コンパイルばしてみてください。
もうコマンド書かんちゃよかでしょもん?
gcc ampro005.c -o ampro005
ですね。

・・・おんも甘かですなぁw

そんなら、できたampro005.exeば実行してみてください。
a=100
って表示されたて思います。
ここでまたわからん表記と関数の出てきたですね。
まずint a;ばってん、これはint型の変数ばaっていう名前で作る(宣言)しとるとです。
int型についてはVol.004で説明しとるとおり、16ビットか32ビットの数値ば扱えるって
書いとります。

環境によって違うばってが、まぁ大体32ビットが多かて思います。
16ビットは大昔ん環境でしょうな、見たこつはなかです。
64ビット環境なら64ビットの場合もあったりするかもしれんです。
なんせ、intがそん環境が一番扱いやすかサイズにさるるこつん多からしかけんですね。

で、次ですばってがa = 100;です。
一般の数学的な式でいけば、「aと100は等しい」っていう意味になるばってが
C言語では(ていうか多くの言語では)ぎゃん書き方ばした場合は
a100代入するって意味になっとです。
ようは=の右側ん値ば左側ん変数aに入れるとたな。

そして新しゅー出てきた関数printfです。
こんも文字ば表示する関数ばってんが、色々とフォーマット指定して
表示んでくっとです。

まずプログラムば実行して表示されるa=100ばってが、
ここはどん部分になるかって言えば
"a=%d\n"の部分がそれに該当すっとです。
a=っていうとはそんまま表示されてわかるばってんが、%d\nって一体何のこつかい?
って思うですね。

こっはですね、%d\nの2つに分けられるとです
(ていうかこん例ではたまたま2つ連続で並んどるだけです)
まず%dの方ば説明すっですね。

これは「数字ば10進数で出力する」っていう意味になっとです。
改めて見てみゅーかな。
printf("a=%d\n", a);
カンマで区切ってaっていうとの指定されとるですね?
こんaっていう変数の値ば%dの所に10進数で表示ばするごつなります。
aには100の代入されとるけん100と置き換わって表示されとるですね。
aん所は変数じゃなくてもよかけん、aって書かずに下んごて
直接、値ば100って書いても同じごつ表示されます。
printf("a=%d\n", 100);

ちなみにこん%dはカンマで区切った所の値ば表示すっとばってが、
複数書くこつんでくっとです。
たとえば
printf("a=%d そして%d\n", a, 999);
ぎゃん書いたらどげんなるかって言えば
次んごて表示さるるです。
a=100 そして999

左側から順番にカンマで区切った値に展開されていくとです。
一番左の%da、つまり100が代入されとるけん100
そん次の2番目の%daの後にカンマで区切って直接999って
数字の書いてありますね、こん直接書いてある数字が置き換わっとです。

だけんぎゃんふうに書けば複数の数字ば1回のprintfで表示でくるごつなっとです。

あと、ぎゃん感じで桁数指定もでくっとですよ。
例えば10000100って表示させたか場合は%05dって書けばよかです。
もし%5dって書いたら  100って感じで頭ゼロじゃなくて空白で揃えらるるです。

ちなみに%dは数字ば10進数で表示するって書いたばってが、他にも色々あって
16進数で表示する場合%xとか8進数なら%oとか、文字なら%cとか文字列なら%sとか
あるです。
それ以外にも色々あるとばってが、それはそん時使う場合にゆっかしゅーて思います。

何でぎゃんこつせなんかっていうたら、putsの引数はint型じゃなかけん
数字とかint型変数ば直接書いてもエラーになっとは当然やっとです。

さて、次ですばってが\nってなんじゃろかい?
って話ですね。
これは改行ば表しとっとです。

さっきのプログラムばぎゃんふうに\nば取っ払ってコンパイルして実行してみてください。
#include <stdio.h>

int main(void)
{
int a;
a = 100;
printf("a=%d", a);
return 0;
}
こっが\nば取っ払う前
ampro005-02¥1
で、こっが\nば取っ払った後
ampro005-02
改行のいっちょ少なかでしょ?
ちなみにputsで出力した時はどぎゃんだったでしょうか?
ampro002-01
画像の使いまわしばってが、改行入っとりますね。
putsは自動的に改行ば入れてくるるとです。

だけん、printfで書く場合とputsで書く場合は注意せんばぎゃん違いのあっですよ。
#include <stdio.h>

int main(void)
{
puts("あいうえお");
puts("かきくけこ");
return 0;
}
こん場合の表示は
あいうえお
かきくけこ
って表示さるっとばってが、
#include <stdio.h>

int main(void)
{
printf("あいうえお");
printf("かきくけこ");
return 0;
}
こん場合は
あいうえおかきくけこ
って改行されずに出てくるです。
putsと同じごつ表示させるには
#include <stdio.h>

int main(void)
{
printf("あいうえお\n");
printf("かきくけこ\n");
return 0;
}
って感じで\nば書いてやる必要のあっとです。
ちなみにputs\nば入れたらどげんなるて思うですか?
#include <stdio.h>

int main(void)
{
puts("あいうえお\n");
puts("かきくけこ\n");
return 0;
}
ぎゃん感じです。
あいうえお

かきくけこ

putsは改行入れんでも改行の入っとるとに
更に\nば入れたら改行のもういっちょ入るとです。

必ず行末に書かんばつまらんってわけでもなかけん
ぎゃん感じにも書けるとです。
#include <stdio.h>

int main(void)
{
printf("あ\nい\nう\nえ\nお\n");
return 0;
}
出力結果はどげんなるかは想像どおりです。
ですね。
ちなみにC言語系の言語ではこん\マークは特殊文字として
扱われるとです。

こん改行も\nって表記するですよね?
ぎゃんふうに\で始まる特殊な文字んこつば
エスケープシーケンスって言うとです。
一応、覚えとってください。忘れてもよかですけど。

ちなみに半角の¥(円)マークは環境によっては\(バックスラッシュ)で
表示される環境もあるとばってが、それは環境の違いなだけで
文字コード0x5cならどちらで表示されようが問題はなかっです。
ただ、表示が違うだけで内部は同じだけんですね。
あなたの環境で\nは「¥n」と「\n」どっちに見ゆっですか?

これで一通り変数の中ば表示さする方法のわかりましたけん、
実際に計算ばしてみゅーかて思います。
そんならさっき作ったプログラムばぎゃんふうに書き換えてみてください。
#include <stdio.h>

int main(void)
{
int a;
a = 100;
a = a + 5;
printf("a=%d\n", a);
a = a - 10;
printf("a=%d\n", a);
a = a * 15;
printf("a=%d\n", a);
a = a / 15;
printf("a=%d\n", a);
a = 5 + 15 * 3 - 10 / 2;
printf("a=%d\n", a);
return 0;
}
んで、コンパイルして実行してみます。
ampro005-03
ぎゃん出力されます。
いっちょいっちょ順番に見ていこうて思います。
まずいっちょ目のa=105ですね。
これは最初、a=100でaに100の代入さるっですね。
そして次にa = a + 5ってあるばってんが、
これはa+5の結果ばまたaに代入せろって意味です。
aは100の代入されとるけん、そん100に5ば足せば105ですね。
で、そん105になった結果の表示されとるとです。

2番目ばってんが、a = a - 10って書いてあります。
これはもうわかるて思うばってんが、a-10の結果ば
aに代入せろって事です。
aはこん時点で105やけんか、105から10ば引けば95になって
そん95ばaに代入してから表示させとるけんa=95って表示されます。

3番目はa = a * 15ってなっとります。
「*」は何かっていうと掛け算の「×」の意味です。
Windowsん電卓ばみて下さい。×じゃなくて*になっとるですね。
大抵のプログラミング言語では掛け算ば*で表すとです。
だけん*は×って思とってもらえればよかです。
ちなみに「*」の読み方は何ていうか知らん人おりますか?
「じごんす」じゃなかですよ、似とるばってが。
これは「アスタリスク」って言うとです。
ばってんが、天草んしーなら「じごんす」で通じるて思います。
・・・と、じごんすはどげんでんよかですばってが、
ようはaが95やけん95×15になるっちゅーことですね。
そん答えばaに代入して表示しとるわけやっけんが、
そん答えの1425が表示されとるとです。

4番目はa = a / 15ばってがもう察してくれらすですね。
*が×なら/は÷です。
/は「スラッシュ」ていうとです。
こん時点でのaの値は1425やけんそっば15で割れば95になっですね。
まぁ、15掛けて15で割るけん元に戻るだけばってが。
で、そればaに代入して表示しとるけん、95の表示されとるですね。

5番目ばってが、これは今までんaは関係なしに数式ば書いてあるですね。
5 + 15 × 3 - 10 ÷ 2
の計算結果ばaに代入して表示しとるだけです。
計算すれば45やけん45て表示されとるですね。

ところで、
こん答えは45じゃなくて25じゃろもん!
・・・って思ったしーは小学生からやり直さんばつまらんですよw
小学生の時なろたはずです
「掛け算と割り算は足し算と引き算より先に計算します」って
思い出したですか?
C言語でも計算の順序はきちんと決まっとるとです。
もし、わがおもとるごたる順番で計算させたかなら算数と一緒で
()カッコばつければよかです。
a = (((5 + 15) * 3) - 10) / 2;
こっで、aの値は25になっですね。

どぎゃんでしょうか?
こっが算術演算子ば使った計算式の書き方です。

四則演算以外にも色々と演算子のあっとばってが、
それもおいおい紹介していこどもとります。

そんなら今回はこの辺で。
今回で5回目になっですね。
さて今回は何ばすっとやったかきゃー忘れたけん
前回書いた記事ば見らんばつまらんですなw

じゃったじゃった、文字ば出力したとやったですね。
そんプログラムがこれです。
int puts(const char* str);

int main(void)
{
puts("Hello,Work天草");
return 0;
}

このputsっていう関数ばってんが、どこにも処理の実体ば書いとらんとに
なんでコンパイルん時にエラーにならんかって話です。

まずぎゃんふうにプログラムば書いてみて下さい。
int puts(const char* str);

void hellowork(void)
{
puts("Hello,Work天草");
}

int main(void)
{
hellowork();
return 0;
}
プログラムの名前は「ampro003.c」とでもしゅーかぃ。

保存したらコンパイルばしてみてください。
コンパイルの方法はわかっですね?
今回までは書くですばい。
gcc ampro003.c -o ampro003

さて、出来上がったプログラムば実行してみましょうかぃ。
ampro003.exeって打てばよかですね

Hello,Work天草
って表示されたって思います。

どぎゃんなっとるかって言えば、プログラムの実行されたら
main関数から始まるって言うたですよね?
で、プログラムは基本的に上から下さん流れるけんまずにmain入ったら
今度はhelloworkっていう関数ば呼び出すごつ書いてあるけん
こん関数の呼ばれます。

で、helloworkの関数の中さん入って(ひゃあって)行って、puts関数ば呼び出して
文字ば表示すっとです。

そしたら次は何もなかけんhelloworkの関数ば抜けて呼ばれた所に戻るとです。
helloworkから戻ってきたら次はreturn 0;mainば抜けて
プログラムの終了すっとですね。

ほんならもういっちょプログラムば作ってみましょうかい?
次のごつ書いてみて下さい。
int puts(const char* str);

void hellowork(void)
{
puts("Hello,Work天草");
}
プログラムは「amlib003.c」にしてみましょうかね。

そしてさっき作った「ampro003.c」もぎゃんふうに書き換えてみてください。
void hellowork(void);

int main(void)
{
hellowork();
return 0;
}

そしてコンパイルばすっとですばってんが、
今回はこんソース2つば使ってコンパイルばしていっちょのexeば作ります。
コンパイルの仕方ばってんが、ぎゃん入力します。
gcc ampro003.c amlib003.c -o ampro003

今回はいつもと違うけん画像ば載せときます。
ampro003-01
新しく作ったソースばいっちょ追加(赤線の所)してコンパイルしました。
で、同じごと実行したら上んごつHello,Work天草って出ますね。

ぎゃん感じでソースファイルば分けて書けるとですね。
そんかわり、main関数は全部の中で1つしか書いたらつまらんです。
あっちゃこっちゃmain関数ば書いたらどんmain関数から開始してよかか
わからんけん、コンパイルでけんです。
また、main関数ば書かんなら「どっからスタートすっとかわからん!」って
これまたコンパイルエラーになるですばってんが。

そもそも、C言語では同じ名前ん関数は1個しか作られんとです。
だけんmain関数も1個しか書けんとは当然やけん。
C++はオーバーライドとか名前空間とかのあるけん同じ名前の
関数ば条件付きで作りはさるるばって、こりゃC言語じゃけんですね。

んで、何の言いたかかって言えば、hellowork関数はmain関数のある
「ampro003.c」にプロトタイプしか宣言しとらんですね。
実際に処理ば書いた(実装したて言う)とは「amlib003.c」で書いとるです。

だけん、コンパイルしたら最終的に「amlib003.c」のhelloworkば見つけて
呼び出せるごつしてexeのでくっとです。

だけん、色々関数ば別のソースファイルに書いて、そん関数ば
他のプログラムでも使えるもでくっとです。
そぎゃん感じで関数ば集めて再利用でくるごつしたとばライブラリって
言うたりします。

ばってんが、putsとかはどこにも実装ば書いてなかですよね?
実はこんputsはC言語のコンパイラに付属しとる標準ライブラリっていう
ライブラリの中にある関数のひとつで、自動的に実装された部分のふっついてくるとです。
だけん、コンパイルしたらそん関数の実装部分ば見つけてきてからexeの出来あがっとですね。

標準ライブラリば使わんで画面に文字ば表示するにはものすごめんどくさかけんやっとれんとです。
だけん、そげんよー使うごたっとば標準ライブラリにしてコンパイラとセットにしてあっとですね。
標準ライブラリは「こういう名前の関数で引数はこうで、戻り値はこうでこういう結果を返す」
っていうとが決められとるけんが、コンパイラとか環境の変わっても標準ライブラリの関数なら
同じごつ書いておなじごたる結果の得られるとです。

だけん、標準ライブラリ自体は別にC言語の機能じゃなかっですよ。
他の言語は文字ば出力する機能の言語自体についとったりする場合のあるばってんが
C言語だけでは画面に文字ば出力するとか、ファイルば操作するっていう機能はもっとらんとです。
そげん機能ばC言語だけで作るとは、やおいかんばってが標準ライブラリの関数ば使えば
簡単に操作でくるごつなるとです。

じゃばってんがですよ、プロトタイプば書かんばいきなり関数ば書いたっちゃ
コンパイラはわかってくれんとです。
いきなり何の宣言もなか関数ば使うとば許してくれんけんです。

なんかこんgccはプロトタイプ宣言なかったっちゃ標準関数は
いきなり関数書いてもコンパイル通るごたんね・・・
ほ、本当ならつまらんはずです!!(そぎゃんふうにして話ば進めます)

で、いっちょいっちょ標準関数のプロトタイプば書くとのめんどくさかですよね?
そこで、そぎゃん標準関数のプロトタイプ宣言ば一気にしてしまう方法のあっとです。
次んごつプログラム書いてください。
#include <stdio.h>

int main(void)
{
puts("Hello,Work天草");
return 0;
}
ソースの名前は「ampro004.c」でよかです。

ここで見慣れんとのまた出てきたですね。

#include <stdio.h>
こりゃ何かっていうと、
stdio.hっていうファイルん中身ばコンパイルすっときにここに展開せろ」
っていう意味です。
こん.hの拡張子のファイルは何かって言えば、ヘッダーファイルっていうて、
関数のプロトタイプとか定数とか色々書いてあるファイルです。
だけん、コンパイルん時にここに書いてある内容の展開されるけん
わざわざ自分で関数のプロトタイプば書かんでよかっです。
putsのプロトタイプもこん中で宣言してあるはずです。

興味んあるならMinGWばインストールしたフォルダん中ば探してみてください。
「stdio.h」っていうファイルのどっかにあるですよ。
同じ名前んとの何個かあるかもしれんばってが、そんうちんどれかが展開さるるはずです。
テキストエディタで開けばプロトタイプとかの宣言のよんにゅ書いてあるです。
そんかわり間違ってもファイルは修正せんごつしてください!
勝手に修正したらおかしくなる可能性のあるけんですね。
そこにあるファイルは絶対に変更したらつまらんファイルです。

ちなみにstdioは「標準入出力」の「Standard Input/Output」を略して
「stdio」になっとるんじゃなかろうかって思います。
他にも文字列操作用の関数の宣言されとるstring.hや時間関連の操作のできるtime.h
とか、色々ありますばってんが、それはまた順次紹介していくごてします。

さて、これで晴れて入門書の最初に書かれとるであろう所に立ちました。
入門では最初、こん#include <stdio.h>おまじないとか紹介してある場合も
あったりすっとですが、そぎゃんわけあるかいwwwって思った事のあったもんで、
わざわざぎゃん回りくどくちっとずつ説明ばしたとです。

これからは標準ライブラリば使ってプログラムば書いて行きます
(標準ライブラリんなからんば始まらんけん)

ちなみにHello,Work天草って表示するampro004のプログラムはDOSプログラムばってんが
Windowsプログラムとして書けばぎゃん感じでしょうかね。
(これもC言語ですばい)
#include <windows.h>
#include <tchar.h>

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
LPTSTR lpCmdLine, int nShowCmd)
{
MessageBox(NULL, TEXT("Hello,Work天草"),
TEXT("雇用促進祈願"), MB_OK);
return 0;
}
プログラムは「amwin01.c」にしてみました。

コンパイルするには-mwindowsっていうオプションばつけんばんです。
ampro003-02

実行したらぎゃんメッセージの出ます。
ampro003-03


全然標準関数ば使っとらんですね?ていうか最初はわけくちゃわからんですよね?
C言語でWindowsプログラミングする場合はWindowsAPIっていうとば使います。
そん基本的なヘッダがwindows.hです。
また、main関数じゃなくてWinMain関数(_tWinMain)から始まります。
ここではMessageBox関数がWindowsAPIになるですね。

C言語によるWindowsAPIプログラミングは最初にとっかかるには敷居が高すぎだけん
まずは、地味にコンソールプログラミング(今しよるやつです)からしたがよかです。

もっと手軽にWindowsプログラム作りたかならC#とかVB.netとかいろいろあるけん
そっちば選んだ方が幸せになれるて思うです。
それらはめんどくさかWindowsAPIば覆い隠してくるっけんC言語に比べれば
非常に生産性のよかです。

おまけとして他の言語で「Hello,Work天草」ば出す場合ば書いてみました。
ぎゃん感じでしょうかね?

Perl
#!/usr/bin/perl
print "Hello,Work天草\n";
exit;

PHP
<?php
        echo "Hello,Work天草\n";
?>

Java
class Hello{
public static void main(String args[]){
System.out.println("Hello,Work天草");
}
}

Javascript
<html><head></head><body>
<script type="text/javascript">
<!--
document.open();
document.write("Hello,Work天草");
document.close();
// -->
</script>
</body></html>

色々と言語はあるばってんが、書き方の違うでしょ?

ばってんが、見てんとおり、文法自体はC言語に近かとです。
多くの言語はC言語の文法ば基本にしとるこつの多かけん
C言語ば覚えとくと他ん言語も覚えやすかて思います。
文法だけじゃなくてポインタの概念も知っとるとと知らんとじゃ
全然違うけんですね。(ポインタについてはまだ先で説明ばします)

今回で5回目で、毎回説明のわかりづらかて思うばってんが、
わからん部分は質問ばしてくれろばわかる範囲で答えるけんですね。
わからんともググッて調べてみます。(わが勉強にもなるし)

そんならば、今回はこの辺で。
こんばんわ。
朝んしーはおはようございます。
昼んしーはこんにちわ。

前回は何もせんプログラムば作ったですね。
一通りプログラムば書いて、コンパイルして、
実行するっちゅー手順がどぎゃん感じかわかったでしょうか?

コンパイルする時はコマンドプロンプトで
gcc ソースファイル -o 作成する実行ファイル
って打てば、コンパイルされて、エラーのなからんば
実行ファイルのできるとですね。

ここらへんのイメージばわかりやすくするごつ画像ば使って
説明ばしてきたばってんが、今後は画像はあんま使わんごてして
説明します。(あんぐらいしかせんけん画像なしでも、えった変わらんて思います)

そんなら、前回のプログラムば説明していきます。
int main(void)
{
	return 0;
}

こっはですね、関数て呼ばれるもんです。
関数っちゅーとは数学とかでも聞いたこつあるて思うとばってんが、
プログラミングで言う関数は簡単に言えば「処理を一まとめにしたもの」
って事になっとです。

C言語は関数の中に処理ば書いてそれば他ん関数から呼び出して
組合わせて行く感じになっとです。

関数の構文ばってんがぎゃん感じになっとるです。

戻り値の型 関数名(引数の型)
{
  処理の内容
}

前回のプログラムの例でいけば、
intが戻り値の型、mainが関数名、voidが引数の型ってなっとります。
そして、C言語は実行された時、一番最初にmain関数の呼び出されるとです。
つまり、前回こんプログラムば実行した時もmainが呼ばれよったとです。

そして処理の内容ばってんが、return 0; ってなっとるですね。
これは、こん関数から0ていう数字ば返して関数ば抜けるぞ!って言う意味です。
C言語はmain関数ば抜けたらプログラムの終了するとです。

さて、もういっちょわからんとのあっですね?
intって何?って。

これは戻り値の型ば表しとるとですが、型って何な?って思うですよね。

C言語には基本的なデータ型のあって、変数っていう数字ば入れる入れ物ば
作れるとばってんが、そんときどんぐらいの
大きさにするかっていうとが型によって変わってくっとです。
で、基本的な型はぎゃんとのあります。

char  ・・・ サイズは最低でも1バイト(8ビット)、
         扱える数値の範囲は1バイトなら-128~127
short ・・・ サイズは概ね2バイト(16ビット)、正式にはshort intばってintは省略可。
         扱える数値の範囲は2バイトなら-32768~32767
int   ・・・ サイズは2か4バイト(16か32ビット)、
         扱える数値の範囲は4バイトなら-2147483648~2147483647
long  ・・・ サイズは4か8バイト(32か64ビット)、正式にはlong intばってintは省略可。
         扱える数値の範囲は8バイトなら-9223372036854775808~9223372036854775807

ってなっとるとばってんが、処理系によってサイズとか符号の有り無しの違う場合のあるけん
気をつけとった方がよかですよ。
ちなみにMinGWのサイズば調べたらぎゃんなっとったです。
ampro002-02


他にもfloatとかdoubleとかいう浮動少数型のあるとばってんが、あんまいっぺんにしたっちゃ
わけんわからんごてなるけん、それはまた別ん機会に説明しますけん。

例えばint num;
って書いたら、「int型の数値を入れられるnumって言う数値の入れ物ば作ったばい!」
ってなります。

で、戻り値ならばintの値ば返すけん、その範囲の数字ならば0じゃなくても返せるとたな。
ただし、main関数の戻り値は0が正常終了で0以外は異常終了みたく扱う場合の多かけん
どげん数値ば戻すかは空気読めなって事ですw

こん型の前にunsignedってつければ符号無しば表して、マイナスの値が扱えん分、
プラスの値の方がようけ扱えるようになっとです。
例えば2バイトのunsigned shortならば、-32768~32767じゃなくて
0~65535までの扱えるごつなるとです。

ちなみにunsignedではなくて、signedっていうともつけられます。
これは省略した場合とほぼ同じで符号のあるぞって言う意味です。
だけん、intsigned intは同じ扱になっとたな。
ばってんが、charだけは処理系依存になって
省略したらunsignedだったりsignedだったりするけん確実にどっちにしたかかば
決めるならばsigned charとかunsigned charとか明確に書いてやれば間違いなかった。

で、引数の型のvoidって何や?
って思わすかもしれんばってが、こんvoidっていうとは空虚(なんもなか)っていう意味で
引数は何もいらん!って意味です。

戻り値ばvoidにするごつもでくっとですよ。
戻り値ば返さんならよかだけの話じゃけん。
そんかわり、voidっていう型の変数は作れんです。
なんもなかわけやっけんw
ポインタは別ばってんが。。。それも今後説明するごつしますけん。


で、ごちゃごちゃわかりにくくなったけんmain以外の関数も作ってみようて思います。
では、ぎゃんふうにプログラムば書いてみてください。
void amakusa(void)
{
}

int main(void)
{
	amakusa();
	return 0;
}

プログラム名は「ampro002.c」とでもしゅーかい。
そっばコンパイルしてみます。
コンパイルはコマンドプロンプトで
gcc ampro002.c -o ampro002
でよかったですね。
もちろん、前回作った場所と同じ所に保存しとかんばんですよ。

で、出来上がったampro002.exeば実行してください。
コマンドプロンプトでampro002.exeって入力すれば実行でくるですね(.exeは省略可)

また何も表示されんですね。
(何かを表示する処理ば書いとらんけん当然ばってが)
でもコンパイルはきちんとされとるです。
前回と変わった部分はわかるですか?
amakusaっていう関数ば作って呼び出しとるですね。
呼び出し方は関数名(引数)っていう書き方ばってが、引数はvoidで
何もなかけん()だけ書いとります。
で、命令の終わりに必ず;(セミコロン)のついとるですね。
これもC言語の決まりで、ステートメント(一連の命令)の終わりには必ずセミコロンば
つけんばつまらんとです。

さて、amakusaっていう関数の中身は何も書いてなかですよね。
だけん何もせん関数になります。

じゃあ、こんプログラムばぎゃんふうにmainとamakusaば入れ替えて
コンパイルしてみてください。
int main(void)
{
	amakusa();
	return 0;
}

void amakusa(void)
{
}
どぎゃんなったですか?
なんじゃいWarning(警告)の出たですね。
何でかって言うたら関数ば呼び出しとる所より前に関数の定義されとらんけんです。
通常ならエラーになってexeは作られんとばってんが、最近のgccは
えらい気の聞いとるですね、何かexe作られたですw

ばってんが、本来は後方参照できん言語やけん、ぎゃん書き方はつまらんとです。

ばってん関数の処理は下ん方に書いたり別のファイルに処理内容ば書いたりして
上ん方でそん関数ば呼び出したか時のあっとです。

そぎゃん場合にはどげんするかって言えば、呼び出す前に
そん関数の形ば一旦宣言しとってやればよかとです。

プログラムんアタマにいっちょぎゃん感じで追加してみてください。
void amakusa(void);

int main(void)
{
	amakusa();
	return 0;
}

void amakusa(void)
{
}

で、コンパイルしてみてください。
何もエラーの出んごつなったでしょ?
これは関数の処理ば書かんで関数の型だけ書いたもんです。
こればプロトタイプっていうとですばってんが、これのあるおかげで
コンパイラが「amakusaって名前の関数は別ん場所で処理内容ば書かれとるとばいな」
って感じで処理ばしてくれて、実際に関数の本体ば見つけたらそれば呼び出すごつして
コンパイルしてくれるとです。えらかですね。

だけんぎゃん感じで関数の実体ば消してしまえば
void amakusa(void);

int main(void)
{
amakusa();
return 0;
}
「関数の実体の見つからん!」っていう
エラーば吐いて、コンパイルエラーになっとです。

さて、なごなごなったですね、そんじゃいよいよ文字ば表示してみましょうか。
プログラムばぎゃんふうに書き換えてください。
int puts(const char* str);

int main(void)
{
puts("Hello,Work天草");
return 0;
}

Hello,Worldじゃなかですよ、「ハローワーク」ですw
天草で雇用が増える事ば願ってそぎゃんしましたw

で、こればコンパイルして実行してみてください。

ぎゃん感じで文字が表示されましたか?
ampro002-01

ぎゃんなれば成功です。

はて、それにしてもputsっていう関数の実体はどこにも書いとらんですね?
何でコンパイル通ったとでしょうか?
そりゃまた次回にちょっと説明ばしますけんね。
[ 1 2  次へ ]      8件中 1-5件