int ・・・ サイズは2か4バイト(16か32ビット)、
扱える数値の範囲は4バイトなら-2147483648~2147483647
long ・・・ サイズは4か8バイト(32か64ビット)、正式にはlong intばってintは省略可。
扱える数値の範囲は8バイトなら-9223372036854775808~9223372036854775807
ってなっとるとばってんが、処理系によってサイズとか符号の有り無しの違う場合のあるけん
気をつけとった方がよかですよ。
ちなみにMinGWのサイズば調べたらぎゃんなっとったです。
他にもfloatとかdoubleとかいう浮動少数型のあるとばってんが、あんまいっぺんにしたっちゃ
わけんわからんごてなるけん、それはまた別ん機会に説明しますけん。
例えばint num;
って書いたら、「int型の数値を入れられるnumって言う数値の入れ物ば作ったばい!」
ってなります。
で、戻り値ならばintの値ば返すけん、その範囲の数字ならば0じゃなくても返せるとたな。
ただし、main関数の戻り値は0が正常終了で0以外は異常終了みたく扱う場合の多かけん
どげん数値ば戻すかは空気読めなって事ですw
こん型の前にunsignedってつければ符号無しば表して、マイナスの値が扱えん分、
プラスの値の方がようけ扱えるようになっとです。
例えば2バイトのunsigned shortならば、-32768~32767じゃなくて
0~65535までの扱えるごつなるとです。
ちなみにunsignedではなくて、signedっていうともつけられます。
これは省略した場合とほぼ同じで符号のあるぞって言う意味です。
だけん、intとsigned intは同じ扱になっとたな。
ばってんが、charだけは処理系依存になって
省略したらunsignedだったりsignedだったりするけん確実にどっちにしたかかば
決めるならばsigned charとかunsigned charとか明確に書いてやれば間違いなかった。
って思わすかもしれんばってが、こんvoidっていうとは空虚(なんもなか)っていう意味で
引数は何もいらん!って意味です。
戻り値ばvoidにするごつもでくっとですよ。
戻り値ば返さんならよかだけの話じゃけん。
そんかわり、voidっていう型の変数は作れんです。
なんもなかわけやっけんw
ポインタは別ばってんが。。。それも今後説明するごつしますけん。
で、ごちゃごちゃわかりにくくなったけんmain以外の関数も作ってみようて思います。
では、ぎゃんふうにプログラムば書いてみてください。
void amakusa(void) { }
int main(void) |
プログラム名は「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
で、こればコンパイルして実行してみてください。
ぎゃん感じで文字が表示されましたか?
ぎゃんなれば成功です。
はて、それにしてもputsっていう関数の実体はどこにも書いとらんですね?
何でコンパイル通ったとでしょうか?
そりゃまた次回にちょっと説明ばしますけんね。