Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++における「int main()」と「int main(void)」の違いとは?

C言語やC++のプログラムを見ていると、main関数の定義には「int main()」と「int main(void)」という2つの書き方があることに気づくことがあります。では、この2つに何か違いはあるのでしょうか?

結論から言うと、C++では両者に違いはありません。また、C言語においてもどちらの書き方も文法的に正しいものです。しかし、技術的には後者の「int main(void)」の方がより明確です。なぜなら、この書き方は「この関数は引数を一切受け取らない」ことを明示的に宣言しているからです。

C言語における重要な注意点

C言語では、関数の引数が指定されていない場合、その関数は引数なしで呼び出すこともできれば、任意の数の引数を渡して呼び出すことも可能になります。これはC++とは異なる挙動です。

以下の2つのサンプルコードを比較してみましょう(これらはC++ではなくC言語のコードである点に注意してください)。

例1:引数なしで宣言した場合

#include<stdio.h>
void my_function() {
    // 何らかの処理
}
main(void) {
    my_function(10, "Hello", "World");
}

実行結果

このプログラムは正常にコンパイルされます

例2:voidを付けて宣言した場合

#include<stdio.h>
void my_function(void) {
    // 何らかの処理
}
main(void) {
    my_function(10, "Hello", "World");
}

実行結果

[Error] too many arguments to function 'my_function'
(関数 'my_function' への引数が多すぎます)

まとめ

C++の場合、上記の2つのプログラムはどちらもコンパイルエラーとなります。つまり、C++では引数リストが空の「()」も「void」と同様に扱われるのです。

一方、C言語では「int main()」のように記述すると、任意の数の引数を渡して呼び出すことが許されてしまいます。しかし「int main(void)」と記述すれば、一切の引数を受け付けないことが保証されます。

このため、特にC言語でコードを書く際には、引数を取らない関数を定義する場合は「void」を明示的に記述する「int main(void)」のような書き方をするのが、より安全で推奨されるスタイルと言えるでしょう。

  1. 【C/C++】const int* と int* const の違いを徹底解説!宣言の読み方のコツも紹介

    はじめに:constとポインタの組み合わせ C/C++では、「const」と「ポインタ」を組み合わせた宣言が複数存在し、それぞれ意味が異なるため、初心者がつまずきやすいポイントの一つです。この記事では、代表的な4つのパターンを整理し、何が変更できて何が変更できないのかを具体例とともに解説します。 4つの基本パターン int* // intへのポインタ int const * // constなintへのポインタ int * const // intへのconstポインタ int const * const // con

  2. C++における「宣言」と「定義」の違いとは?具体例でわかりやすく解説

    C++を学んでいると、「宣言(declaration)」と「定義(definition)」という2つの用語が頻繁に登場します。この2つはよく混同されがちですが、実際には明確な違いがあります。本記事では、その違いを具体例とともにわかりやすく解説します。 宣言(Declaration)とは? 宣言とは、プログラム内で使用する変数、ユーザー定義型、関数について、その型やサイズ(関数の場合は戻り値の型や引数の型・数)をコンパイラに事前に伝えることです。 重要なポイントは、宣言の段階ではメモリ上に領域が確保されないという点です。コンパイラに対して「この名前の変数や関数が後で登場しますよ」と知らせるだけの