関数内ローカル関数
関数内で宣言することで、その関数でしか使っていないという明示になる。
しかし、関数内の記述が増えるので分かりにくくなってしまう。
C
GCC 拡張された C では以下のようにかけます。
詳しくは 【C言語】GCC拡張によるNested Function(関数内関数) を読んでください。
#include <stdio.h>
int main() {
void helloWorld() {
printf("HelloWorld\n");
}
helloWorld();
}
C++
同様にこう書いても、C++ ではエラーになります。
#include <iostream>
int main() {
void helloWorld() {
std::cout << "HelloWorld" << std::endl;
}
helloWorld();
}
本来、 std::function など使うべきところですが、以下のようにも出来ます。
#include <iostream>
int main() {
struct internal {
static void helloWorld() {
std::cout << "HelloWorld" << std::endl;
}
};
internal::helloWorld();
}
構造体を内部で定義し、その static 関数として 関数内ローカル関数を定義するというものです。
関数宣言時にはブロック内に書き、関数呼び出し時にはスコープがつくので、案外分かりやすい気がします。
GCC 拡張の C とは違い、グローバルな関数と同じような扱いになるので、以下のようなことは出来ません。
#include <iostream>
int main() {
int variable = 0;
struct internal {
static void helloWorld() {
variable = 5; // ERROR
std::cout << "HelloWorld" << std::endl;
}
};
internal::helloWorld();
}
選択肢のひとつとして知っておいても良いのではないかと思います。