private
C89 または C99 キーワードではありません。 Wikibooks* の C プログラミング/リファレンス テーブルを参照してください。
また、C は Java や C# とは何の関係もありません** (実際には、C++ とも関係ありません)。ただし、その逆は正しくありません。たとえば、C++ は C から派生しました。
* より良いリファレンスが必要です!
** 実際、C89 は const
を「借用」しました と volatile
C++ からのキーワード。同様に、C99 は inline
を「借用」しました。 キーワード、および _Bool
も追加 および _Complex
(C++ の bool
のように そしてcomplex
、それぞれ)
[要出典]
.
どちらも 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