[ 前へ | 目次 | 次へ ]

main 関数

ここでは、main関数について扱います。


main 関数

通常の関数は、プログラムの中で明示的に呼び出さない限り、実行される事はありません。

しかし、システム側から特定のタイミングで自動的に呼び出され、実行される特別な関数がいくつか存在します。 その一つが、main 関数です。

main 関数は、実用的なプログラムを開発する際において重要な役割を担います。 例えば、コマンド入出力端末からVCSSLプログラムを実行する際、 コマンドのパラメータを、main関数の引数として受け取る事ができます。

例えば、任意のファイルを読み込んで処理するようなプログラムを、G UIではなくコマンドライン用に開発する場合、開くファイルパスはコマンドライン引数として受け取るようにするのが一般的でしょう。 このようなコマンドライン引数は、VCSSLプログラムをコマンドラインから(vcsslコマンドで)起動する際、 main関数の引数に渡されます。つまりこのような場合、main関数は必須となります。

また別の例として、GUIやグラフィックスを用いた実用的なプログラムの開発においても、 メインループ(画面更新や、ユーザーからの操作に対応するための無限ループ)をグローバル領域の中には直接書かず、 なるべくmain関数の中か、そこから呼ばれる関数の中に記述する事が推奨されます。 なぜなら、メインループがグローバル領域に存在すると、そこより下はいつまでたっても処理されないため、 それ以降で宣言されたグローバル変数が初期化されないという不具合が生じるからです。

main関数の呼び出されるタイミング

main 関数は、関数外領域の処理が全て完了した後に、システムから自動的に呼び出されます。

従って、関数外領域で変数の宣言や初期化などを記述した場合、main 関数が呼ばれた時点では、 それらは全て初期化が完了した状態となっています。

main関数の文法

main 関数は、以下のような文法で定義されています:

void main ( string args[ ] ) {
    処理内容 ;
}

この形の関数を記述しておくと、システム側から自動で呼び出されます。

その際、引数args にはシステム側からの情報が渡されます。 この情報は一般の場合、何も入っていません。しかし、例えばプログラムをコマンド入出力端末から起動した場合などは、 起動時のパラメータなどが格納されています。

main関数の使用

実際に、main 関数を使用してみましょう。以下のように記述し、実行してみてください。

- 実行結果 -

120

このプログラムは、変数FACTRIAL_ARGS にセットした値の階乗を求めます。 main 関数をプログラム中のどこからも呼び出していないにも関わらず、自動で実行されます。

main関数と移植性・可読性

VCSSL では、main 関数を使用しなくても処理を行う事が可能です。

スクリプト言語のVCSSLでは、main関数を使用しなくても、 関数外領域で特に制限なく処理を記述する事が可能です。 本文書のサンプルコードでもそうしてきました。 しかし他の言語、特にC系のコンパイラ型言語では、 関数外領域で宣言以外の処理を行う事を禁止しているものも多くあります。 従ってVCSSLでもmain関数を使用すれば、そのような言語への移植性が向上します。

なお、関数外領域で宣言以外の処理も記述できるのは、比較的短いプログラムでは手軽で便利です。 しかし、ある程度長くて関数も多いプログラムでは、関数外領域に宣言以外の処理が混在していると、 処理の流れが読みづらくなります。そのような場合、関数外領域で行うのは宣言のみに限定しておいて、 それ以外の(手続き的な)処理をmain関数にまとめると読みやすくなります。



スポンサーリンク



スポンサーリンク

この階層の目次
お知らせ

Vnanoのスクリプトエンジンアーキテクチャ解説1: 全体像
2019年05月28日 - RINEARNでは現在、 アプリケーション組み込み用スクリプトエンジン「 Vnano 」を、オープンソースで開発中です。今回は、このスクリプトエンジンのアーキテクチャ面を掘り下げて解説します。

リニアンプロセッサー nano の先行開発版やソースコードリポジトリを公開
2019年04月16日 - オープンソースで開発中の小型プログラム関数電卓ソフト、「 リニアンプロセッサー nano 」の先行開発版やソースコードリポジトリを公開しました。概要と使用方法、ビルド方法などについて解説します。

各ソフトウェアの最新版を一括でリリース、OpenJDKのJava実行環境(JRE)に対応
2019年03月06日 - RINEARNでは3月6日に、主要なソフトウェアの最新版を一括でリリースしました。今回のアップデートには、以前お知らせした、OpenJDKで生成したJREへの対応が含まれています。その概要等をお知らせします。

新着
連番ファイルから3Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。
2019年06月03日
連番ファイルから2Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。
2019年05月24日
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。
2019年05月21日
[公式ガイドサンプル] ポリゴンを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体の基本的な構成要素となるポリゴンを生成し、3D空間に配置します。
2019年05月20日
[公式ガイドサンプル] CSVファイルにデータを書き出し&読み込んで、複雑な3次元曲面のグラフを描く(魔法陣形)

「VCSSLスタートアップガイド」内のサンプルコードです。CSVファイルにデータを書き出し、さらにそれを読み込んで、魔法陣のような3次元曲面のグラフを描画します。
2019年05月17日
開発元Twitterアカウント

スポンサーリンク