tkymt
@tkymt (拓 山本)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C++ static グローバル関数

解決したいこと

2つ質問です。
staticなグローバル関数はどんな動作をしますか?
このサンプルをの52行目です。GameActivityを使う場合staticでなければならない理由がありますか?
https://github.com/android/ndk-samples/blob/main/hello-vulkan/app/src/main/cpp/vk_main.cpp

以上、よろしくお願いします。

0

2Answer

グローバルな変数または関数を static で修飾すると、それはその翻訳単位 (←実質的には .cpp ファイルひとつのことだと思ってよいです) の外に公開しないという意味です。 他で使う必要がない、使うべきではないものならカプセル化の考え方に基づいて隠しておくに越したことは有りません。

初心者なら static を付けるとファイルの外には非公開として考えておけば十分ですがより詳細に言えば言語仕様的にはリンケージという概念で説明されます。

リンケージ (linkage) というのはその名が示す通りにリンク (link) するかどうかの判断にかかわります。 プログラム中に出てくる HandleCmd という名前があったとき、それとこれが同じものだと判断して結合 (link) する範囲を指示するわけです。

static を付けると 内部リンケージとなり、翻訳単位の内部とだけリンクするというわけです。 逆に外部リンケージであれば他の翻訳単位にあるものともリンクします。 内部リンケージなものは他の翻訳単位に同名のものがあっても単に同じ名前の別物です。

C++ では無名の namespace で囲っても内部リンケージになるのでプロジェクトによってはそちらを使っていることもあります。

3Like

Your answer might help someone💌