ブロックスコープで関数を宣言できるようです:
int main()
{
void f(); // OK
}
しかし、私はそれを定義することはできません:
int main()
{
void f() {}; // ERROR
}
私の質問は、ブロック スコープでの関数宣言の用途は何ですか? ユースケースとは?
定義できます。http://ideone.com/kJHGoF
#include <cstdio>
int main()
{
void f(); // Forward declare function named "f" returning void in the
// global namespace.
f();
}
/*
void g()
{
f(); // ERROR!
}
*/
void f()
{
std::puts("hello!");
}
誰かが実際にこれを使用したい理由がわかりません。C との下位互換性のために、このように言語化されています。しかし、誰かがCでこれをどうするかわかりません.
それ自体がヘッダーでパブリックに定義されていない、外部にリンクされた関数を宣言して呼び出すためのショートカットになる場合があります。たとえば、LibDebugOn(int)
呼び出しを提供していることがわかっているがヘッダーで定義していない C ライブラリに対してリンクしているとします。1 か所で宣言して呼び出すためのショートカットになります。
void myFunc() {
// call "Lib" but turn on debugging via hidden API
extern "C" void LibDebugOn(int); // declare hidden C-linked function
LibDebugOn(1); // call it
// do something with the library here...
LibDebugOn(0); // turn off lib debugging now
}
公平を期すために、これは通常、1 回限りの簡単なハックにのみ価値があり、推奨されるものではありません。