C++ static グローバル関数
解決したいこと
2つ質問です。
staticなグローバル関数はどんな動作をしますか?
このサンプルをの52行目です。GameActivityを使う場合staticでなければならない理由がありますか?
https://github.com/android/ndk-samples/blob/main/hello-vulkan/app/src/main/cpp/vk_main.cpp
以上、よろしくお願いします。
2つ質問です。
staticなグローバル関数はどんな動作をしますか?
このサンプルをの52行目です。GameActivityを使う場合staticでなければならない理由がありますか?
https://github.com/android/ndk-samples/blob/main/hello-vulkan/app/src/main/cpp/vk_main.cpp
以上、よろしくお願いします。
グローバルな変数または関数を static
で修飾すると、それはその翻訳単位 (←実質的には .cpp
ファイルひとつのことだと思ってよいです) の外に公開しないという意味です。 他で使う必要がない、使うべきではないものならカプセル化の考え方に基づいて隠しておくに越したことは有りません。
初心者なら static
を付けるとファイルの外には非公開として考えておけば十分ですがより詳細に言えば言語仕様的にはリンケージという概念で説明されます。
リンケージ (linkage) というのはその名が示す通りにリンク (link) するかどうかの判断にかかわります。 プログラム中に出てくる HandleCmd
という名前があったとき、それとこれが同じものだと判断して結合 (link) する範囲を指示するわけです。
static
を付けると 内部リンケージとなり、翻訳単位の内部とだけリンクするというわけです。 逆に外部リンケージであれば他の翻訳単位にあるものともリンクします。 内部リンケージなものは他の翻訳単位に同名のものがあっても単に同じ名前の別物です。
C++ では無名の namespace
で囲っても内部リンケージになるのでプロジェクトによってはそちらを使っていることもあります。
このstaticはファイルスコープを意味しています。
シンボルが他のソースをコンパイルしたオブジェクトファイルからは見えません。
https://en.wikipedia.org/wiki/Scope_(computer_science)#File_scope