← SEARCHABLE ARCHIVE
C / C++ · 2026-05-10

C++ 基礎からマスターまで — 第4回

関数とは何ですか? 2話

INTERACTIVE READING MODE →

本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。

この記事では、基本的な関数の使い方についてさらに学びましょう。

#include <iostream>

void function1(){
    std::cout << "function1!" << std::endl;
}

int main(){
    function1();
    function2();
    return 0;
}

void function2(){
    std::cout << "function2!" << std::endl;
}

そのコードはコンパイルされません。 コンパイラによって異なりますが、 main.cpp:9:5: error: ‘function2’ was not declared in this scope; というエラーが浮かんだのを見ることができる。

私たちの目にfunction2が宣言されているのに、なぜコンピュータは知らないのか? C言語とほとんどのプログラミング言語はコードを上から読みます。 つまり、対応するコードはコンピュータにこのコマンドを発行します。

function1の宣言を読み込み、function1をメモリ上に作成します。 main関数が実行され、function1とfunction2が実行されます。 function2の宣言を読み込み、function2をメモリ上に作成します。 (Name Lookupの失敗については後で確認してください。)

人間が読んでも何かおかしくないのか?

function2が宣言される前にmainで実行されようとすると、コンパイルエラーが発生しました。

#include <iostream>

void function1(){
    std::cout << "function1!" << std::endl;
}

void function2(){
    std::cout << "function2!" << std::endl;
}

int main(){
    function1();
    function2();
    return 0;
}

したがって、このコードはエラーを引き起こさないと予想されます。

または、関数の型だけをコンパイラに事前に通知する宣言をmain関数の上に作成し、 実際の動作を入れた実装はmain関数の下に作成する方法がある。

#include <iostream>

void function1();
void function2();

int main(){
    function1();
    function2();
    return 0;
}

void function1(){
    std::cout << "function1!" << std::endl;
}

void function2(){
    std::cout << "function2!" << std::endl;
}