LoginSignup
0
0

C++で後の行でのみ宣言している関数をそれより前の行で呼び出す

Posted at

例のSNSで、こんな投稿を見つけました。

これに対しプロトタイプ宣言に言及する返信が複数ついていますが、プロトタイプ宣言は宣言です。
よって、「後の行で宣言してる関数」という条件を骨抜きにしてしまい、つまらないです。
とはいえ、「後の行で宣言してる関数」という条件だけで、「前の行で宣言していない」という条件は無いので、無効ではないでしょう。

さて、C++で後の行で宣言し、前の行では宣言していない関数を呼び出すことはできます。
たとえば、条件付きコンパイル自分自身のインクルードにより、宣言を呼び出しより先にコンパイルするようにすることで実現できます。

#include <iostream>

#ifdef IS_2ND_STAGE

int main() {
    test(); // 関数の呼び出し
    return 0;
}

#else

void test() { // 関数の宣言 (兼定義)
    std::cout << "hello from test()!\n";
}

#define IS_2ND_STAGE
#include __FILE__

#endif

[C++] gcc 13.2.0 - Wandbox

また、関数ポインタを使うことでもできます。

#include <iostream>

void helper(void (*func)()) {
    func(); // 関数の呼び出し
}

void test() { // 関数の宣言 (兼定義)
    std::cout << "hello from test()!\n";
}

int main() {
    helper(test);
    return 0;
}

[C++] gcc 13.2.0 - Wandbox

なお、これらしか方法が無いとは限らないでしょう。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0