0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CPythonのmain関数

Posted at

こんにちは。今回は最も普及しているPythonの処理系CPythonのソースを読んでいるとmain関数を見つけたので、少しだけそのことを書こうと思います。

main関数とは

C言語を書いたことがある人ならば誰でも知っているであろうmain関数。
これはプログラムで始めに実行される関数です。(厳密には違うらしい?)
コマンドの引数などはここで受け取ります。
CPythonはC言語で書かれているのでmain関数があるのは当然なんですが、あれほど大きいプロジェクトでも基礎通りなんだな~と感心したのでこの記事を書こうと思いました。

main関数の実装

CPythonのレポジトリのPrograms/python.cにあります。

Programs/python.c
/* Minimal main program -- everything is loaded from the library */

#include "Python.h"

#ifdef MS_WINDOWS
int
wmain(int argc, wchar_t **argv)
{
    return Py_Main(argc, argv);
}
#else
int
main(int argc, char **argv)
{
    return Py_BytesMain(argc, argv);
}
#endif

#ifdef MS_WINDOWSがあるので、Windowsはwmain関数でそれ以外は普通にmain関数が呼ばれるみたいです。
wmainとはワイド文字のコマンドライン引数に対応したmainらしいです。
どうしてこのような実装にしたのかはわからないです...
wmainとmainはそれぞれPy_Main, Py_BytesMain関数を呼び出しているのですが、その内部では両方がコマンドライン引数の情報を_PyArgv構造体に入れてpymain_main関数を実行していました。興味がある方は処理を追ってみてください。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?