■
以前、main関数について述べましたが、
もうちょっと詳しく書こうかと。
正しいmain()の書き方は!?
ということですが、
ISO C, ANSI Cでmain()は以下の2つが標準とされているようです。
int main( void ) { ... return 0; }
int main( int argc, char* argv[] ) { ... return 0; } // もしくは、 int main( int argc, char** argv ) { ... return 0; }
正常に終了するならば、0を
異常終了ならば0以外の数値を返すことに決まっているようです。
なぜ、intの値を返すかというと、プログラムはmain()から処理されます(実際は違うのですが。)
そして、OSにプログラムが終了したことを伝えるために値を返すということです。
void main( void )
としても、0が返されることはありません。
voidは”空の”とかそんな意味になります。
void main( void )
と書きたい時は、
「俺は制約なんて守りたくないんだ!OSに値を返す? そんなの関係ねぇ!」
っと思う人が書けば・・・。(いつかこのネタも古くなるんだろうなぁ)
いや、値を返しましょう^^;
ではでは、次に。
/* Main.c */ main( ) { ... } // Main.cpp main( ) { ... }
上の2つのプログラムの違いは何でしょう?
一応説明すると、上が、C言語のソースプログラム
下が、C++のソースプログラムとなります。
C言語のコメントは/* */で囲まれた部分になります。
C++では// で1行コメントになります。
ただ、C言語のコンパイラによっては、//も使えるものもあります。
では、正解。
今回はMicrosoftのVisual Studio2005を使ってコンパイルしてみました。
上のMain.cの場合・・・
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========
下のMain.cppの場合・・・
main.cpp(7) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
test - エラー 1、警告 0
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
なんと、C++で書かれたものはコンパイルエラーとなりました。
なぜかというと、
C言語では戻り値を省略するとvoid
C++ではintとみなされるのです。
※間違いだったので削除
これは注意が必要ですね。
ただ、後ですぐに判断がつくように戻り値はきちんと書いたほうがいいですね。