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

【C言語入門】int main()とint main(void)の違いを徹底解説


int main と int main(void) の基本的な意味

int main は、プログラムの実行終了時に整数値(通常は「0」)を返すことを表します。「0」はプログラムが正常に完了したことを示す戻り値です。

int main の基本構文は以下の通りです。

int main(){
    ---
    ---
    return 0;
}

int main(void) は、関数が引数を一切受け取らないことを明示的に表します。もし括弧内に void を記述しない場合、C言語ではその関数は任意の個数の引数で呼び出せるものとして扱われてしまいます。

int main(void) の基本構文は以下の通りです。

int main(void){
    ---
    ---
    return 0;
}

一見すると両者は同じように見えますが、技術的には int main(void) の方が優れています。「main 関数はパラメータなしでのみ呼び出せる」という意図が明確になるためです。

一般的に C 言語では、関数のシグネチャに引数が何も指定されていない場合、その関数は任意の個数のパラメータ付きでも、あるいはパラメータなしでも自由に呼び出すことが可能です。

それでは、同じロジックを使って両方の関数のコードを実装してみましょう。両者の唯一の違いは、宣言部分の構文だけです。

例1:引数なしで定義した int main()

以下は、引数なしの int main() 関数を使用した C プログラムです。

#include <stdio.h>
int main(){
    static int a = 10;
    if (a--){
        printf("after decrement a =%d\n", a);
        main(10);
    }
    return 0;
}

出力結果

上記プログラムを実行すると、以下のような結果が出力されます。

after decrement a =9
after decrement a =8
after decrement a =7
after decrement a =6
after decrement a =5
after decrement a =4
after decrement a =3
after decrement a =2
after decrement a =1
after decrement a =0

例2:引数ありで呼び出した int main(void)

次に、同じ処理を int main(void) として定義し、引数を付けて呼び出してみます。

#include <stdio.h>
int main(void){
    static int a = 10;
    if (a--){
        printf("after decrement a =%d\n", a);
        main(10);
    }
    return 0;
}

出力結果

上記プログラムを実行すると、以下のようにエラーとなります。

error

int main() と int main(void) に対して同じコードを書くと、後者ではエラーが発生します。これは、void によって「この関数はパラメータを受け取らない」ことが明示されているためです。

そこで、上記の例から main 呼び出し時の引数「10」を取り除いて再コンパイルしてみましょう。修正後のコードは以下のようになります。

修正後のプログラム

#include <stdio.h>
int main(void){
    static int a = 10;
    if (a--){
        printf("after decrement a =%d\n", a);
        main();
    }
    return 0;
}

出力結果

上記プログラムを実行すると、以下のような結果が出力されます。

after decrement a =9
after decrement a =8
after decrement a =7
after decrement a =6
after decrement a =5
after decrement a =4
after decrement a =3
after decrement a =2
after decrement a =1
after decrement a =0
  1. 【C++】仮想関数と純粋仮想関数の違いを徹底解説!宣言方法と使い分けのポイント

    C++のオブジェクト指向プログラミングにおいて、ポリモーフィズム(多態性)を実現するために欠かせないのが「仮想関数(Virtual Function)」です。さらに、その特殊な形として「純粋仮想関数(Pure Virtual Function)」が存在します。本記事では、この2つの違いを比較表とサンプルコードを使いながら、初心者にもわかりやすく解説します。仮想関数と純粋仮想関数の違い一覧仮想関数(Virtual Function)純粋仮想関数(Pure Virtual Function)クラス内に実装(定義)を持つ。実装(定義)を持たず、「= 0」として宣言される。宣言方法:virtual 関

  2. 【初心者向け】Pythonの関数とメソッドの違いを徹底解説!基本構文と実例つき

    関数(Function)とは 関数とは、特定のタスクを実行するためにまとめられたコードブロックです。独自のスコープを持ち、名前を指定して呼び出します。引数は0個でも複数個でもよく、処理の終了時に値を返すことも、返さないことも可能です。 関数の基本構文 def 関数名(引数1, 引数2, ...): # 関数本体 それでは、ごくシンプルな「sum」という関数を作成してみましょう(関数名は自由に付けてかまいません)。この関数は num1 と num2 という2つの引数を受け取り、その合計を返します。sum(5, 6) のように呼び出すと、11 が返されます。 def sum(num1