crowzの日記: C言語で基本的な事を学ぶ2日目 1
だいぶ間が空いてしまったが、C言語でカレンダーを実装する作業はすすんでいる。
# とはいえ、作業と呼べるには程遠いが
とりあえず、カレンダーと言えばカギは「日付」と「ループ」と「文字列のフォーマット」だと勝手に思ってる。
それを言語的に順番に考えて見ようと思ったが、C言語の作法的なものとコンパイルの仕方が先だな。
まず、C言語では関数が絶対であるという事。
そしてmainという関数が必ず必要でこれが一番最初に始まるようだ。
(当然ながら)スクリプト言語の用にファイルの先頭から始まるわけでは無く、この関数をまず実行するというのが作法のようだ。
なので絶対にプログラムにはmain関数が存在する。
void main(){
}
関数名の頭のvoidは返り値が無いという意味らしい。
関数の見た目は他の言語と一緒なので特に問題は無い。(他の言語がCを真似しているのだろうけども)
次に文字列の出力。これは
printf("%s", "Hello World\n");
これもどこかで見た事のある関数なので全然問題ない。
これを踏まえたうえでHelloWorldは
void main(){
printf("%s", "Hello World\n");
}
こんな感じだろう。
次にgccでのコンパイル。
cygwinで作業をしているが、特にGNU/Linux上でも差は無いと思う。
コンパイルの作業は今のところこんな感じ
gcc -o .exe .c
Windows なので exeをつけているが、別につけなくても問題は無かろう。
たぶん-o = outputのファイル名指定 ということだろう
ソースファイル名も.cという拡張子になっているがCのソースであれば別になんでもいいんだろうな。
これでHello worldは完成。
ん? (スコア:1)
えー、参考にしている資料が間違っています。この関数は
int main( int argc, char *argv[] )
が正しい。
main() という関数は、実際には「スタートアップコード」から呼び出される関数です。スタートアップコードがこの関数を呼ぶときに、引数を2つ引渡し、戻り値として整数を要求しています。Cでmain() から別の関数を呼び出すのと同じ構造が、すでに最初から存在している、と言うわけです。
プログラムを実行して終了すると…特に unix の場合、bash などでプログラムを実行すると、実行した後に
$?
というシェル変数に値が入ります。実は main() の戻り値がこの $? になります。ただし 0-255 までの値に限定されますが。
http://www.kouno.jp/home/c_faq/ [kouno.jp]
の
http://www.kouno.jp/home/c_faq/c11.html#0 [kouno.jp]
のQ11.12 を参照してください。
fjの教祖様