Hatena::ブログ(Diary)

int main(int argc, const char **argv)って何? このページをアンテナに追加 RSSフィード

質問int main(int argc, const char **argv)って何?

懐かしい質問だね…答えはここにあります。この質問のせいで、今の自分がここにいるって考えた人は僕だけなのかなぁ?

こちらはあるゲーム会社のプログラマが語った日常の話…技術やプログラムなどを語りたいが、情報漏洩で捕まるのが怖くてやれない僕がいる。

2006-05-19, Fri Flushしてくださいよ…

[] GNU Globalの修正

Doxygenの為に、MacOS XGNU Globalビルドした。なぜかlangmapのエラーが出ました。うぅ、プログラムバグがあったよ…バッファをフラッシュしないのでlangmapをparseする時にエラーになってしまった。langmap.cのsetup_langmap()とmake_suffixes()と言う二つの関数バッファフラッシュするようにしたら、うまくできました。

void
setup_langmap(const char *map)
{
  ...
  if ( (onsuffix == 0 && *p == ',') || (onsuffix == 1 && *p == ':') )
    die_with_code(2, "syntax error in langmap '%s'.", map);
  fflush(stdout); // Flush stdout...
  ...
}

void
make_suffixes(const char *langmap, STRBUF *sb)
{
  ...
  if ( (onsuffix == 0 && *p == ',') || (onsuffix == 1 && *p == ':') )
    die_with_code(2, "syntax error in langmap '%s'.", langmap);
  fflush(stdout); // Flush stdout...
  ...
}

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

回答int main(int argc, const char **argv)って何?

C/C++のメイン関数です。C/C++プログラムは一つのメイン関数が必要です。プログラムを実行すると、この関数を最初に呼ばれています。argcにはパラメーターの数が入り、argvの方はパラメーターそのものが入っています。

例えば、UNIXで実行コマンドが
./xxx_test xxx.txt yyy.txt
この場合、argcとargvの値は
  • argc = 3
  • argv[0] = "xxx_test"
  • argv[1] = "xxx.txt"
  • argv[2] = "yyy.txt"

この関数はint値を返さないとならない。この為に、実行成功の場合、メイン関数の最後にreturn 0を追加しないとならない。不正の場合はreturn 1を返しましょう。ちょっと読みにくいと考えた方もいますが、stdlib.hにEXIT_SUCCESSとEXIT_FAILUREと言うマクロがありまして、これを使えば、returnコマンドがreturn EXIT_SUCCESS又はreturn EXIT_FAILUREになります。