質問

ANSI C(またはその他のC)の「プライベート」または「パブリック」キーワードですか、またはC ++(およびJava、C#、...)でのみ追加されましたか?

役に立ちましたか?

解決

private はC89またはC99のキーワードではありません。 WikibookのCプログラミング/参照テーブル *を参照してください。

また、CはJavaやC#とは関係ありません(実際、C ++とも関係ありません)。ただし、逆は当てはまりません。たとえば、C ++はCから発展しました。

*より良い参照が必要です!
**実際、 C89" borrowed" C ++の const および volatile キーワード。同様に、C99は「借用」しました。 inline キーワード、および _Bool および _Complex (C ++の bool および complex 、それぞれ) [citation-needed]

他のヒント

どちらもCのキーワードではありませんが、一部の人々は次のことをしています:

#define public 
#define private static

更新:

上記を行うのは悪い考えだと思う人のために、私は同意します。しかし、誰かが public または private をCのキーワードと考える理由を説明しています。

Cでコンパイルできないと思う人は、これを試してください:

#include <stdio.h>
#include <stdlib.h>

#define public
#define private static

private void sayHello(void);

public int main(void) {
    sayHello();

    return (EXIT_SUCCESS);
}

private void sayHello(void) {
   printf("Hello, world\n");
}

C ++でコンパイルしないと思う人のために、はい、上記のプログラムはそうします。

更新:

まあ実際には、C ++標準のこの部分のために未定義の動作です:

  

を含む翻訳単位   ヘッダーにはマクロを含めないでください   宣言または定義された名前を定義する   そのヘッダーに。また、そのような   翻訳単位はマクロを定義します   キーワードと字句的に同一の名前。

したがって、上記の例と以下の例は、C ++で正気なことをする必要はありません。私の答えはまだCに対して完全に有効です(間違っていることが証明されるまで!:-))。

プライベートメンバーを持つC ++クラスの場合、次のような類似した(悪用と見なされる)ことができます。

main.c

#include <cstdlib>
#define private public
#include "message.hpp"

int main() {
    Message msg;

    msg.available_method();
    msg.hidden_method();

    return (EXIT_SUCCESS);
}

message.hpp

#ifndef MESSAGE_H
#define MESSAGE_H

#include <iostream>

class Message {
  private: 
      void hidden_method();

  public: 
      void available_method();
};

inline void Message::hidden_method() {
    std::cout << "this is a private method" << std::endl;
}

inline void Message::available_method() {
    std::cout << "this is a public method" << std::endl;
}

#endif

static private とは異なります。これは、 constructor クラス(C言語の構造体のメンバーを初期化する関数)。

静的変数は、定義されたコードの部分(関数、構造体など)でのみ使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top