Code Fix

初級

error: '::main' must return 'int' の原因と直し方

main関数の戻り値の型をvoidにしてしまったときに出るエラーです。C++の標準では、main関数は必ずint型を返すと決められています。

エラーメッセージの読み方

main.cpp:2:1: error: '::main' must return 'int'
main.cpp
ファイル名
2
行番号
1
列番号 — この位置でg++が構文解析に失敗しました
'::main' must return 'int'
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  #include <iostream>
 2  void   main() {
       ^
 3      std::cout << "start" << std::endl;
 4      return 0;
 5  }
main.cpp:2:1: error: '::main' must return 'int'

C++の標準ではmain関数は必ずint型を返すと決まっています。voidにするとコンパイルエラーになります。

直し方: void を int にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  #include <iostream>
 2  void main() {
      ^
 3      int x = 1 + 1;
 4      std::cout << x << std::endl;
 5      return 0;
 6  }
main.cpp:2:1: error: '::main' must return 'int'

C言語の一部の環境ではvoid main()が動くことがありますが、標準準拠を志向するg++では認められません。

直し方: void を int にします。

この問題を解いてみる →

パターン3

 1  #include <iostream>
 2  void  main() {
      ^
 3      std::cout << "end" << std::endl;
 4      return 0;
 5  }
main.cpp:2:1: error: '::main' must return 'int'

return 0;を書いていても、宣言部分のvoidが残っているとエラーになります。戻り値の型そのものをintに直す必要があります。

直し方: void を int にします。

この問題を解いてみる →

パターン4

 1  #include <iostream>
 2  void  main() {
      ^
 3      std::cout << "go" << std::endl;
 4      return 0;
 5  }
main.cpp:2:1: error: '::main' must return 'int'

C++の標準ではmain関数は必ずint型を返すと決まっています。

直し方: void を int にします。

この問題を解いてみる →

パターン5

 1  #include <iostream>
 2  void  main() {
      ^
 3      int y = 10;
 4      std::cout << y << std::endl;
 5      return 0;
 6  }
main.cpp:2:1: error: '::main' must return 'int'

return 0;を書いていても、戻り値の型そのものをintに直す必要があります。

直し方: void を int にします。

この問題を解いてみる →

よくある誤解

C言語の入門書や一部の環境では void main() が動いてしまうことがありますが、これは処理系の拡張であって標準ではありません。標準準拠を志向するg++では明確なコンパイルエラーになります。

実務での勘所

main関数には、C++の中でも特別な例外規定があります。他の一般的な関数では、戻り値の型がvoidでないのにreturn文を書かずに関数の終わりまで到達すると未定義動作になります。しかしmain関数だけは、return文を省略して終わりまで到達した場合、自動的にreturn 0;が実行されたのと同じ扱いになると規格で明記されています。この特例はmain関数だけに許された書き方で、他の関数では通用しません。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)