‘private’是C关键字吗?

是ANSI C(或任何其他C)中的“私有”或“公共”关键字,还是仅以C ++(以及Java,C#,…)添加?

private不是C89或C99关键字。 请参阅Wikibooks上的C编程/参考表 *。

此外,C与Java和C#没有任何关系(实际上,也不是C ++)。 然而,相反的情况并非如此 – 例如,C ++从C增长。

*需要更好的参考!
**实际上, C89从C ++“借用”了constvolatile关键字 。 同样地,C99“借用”了inline关键字,并且还添加了_Bool_Complex (分别像C ++的boolcomplex[citation-needed]

也不是C关键字,但有些人会执行以下操作:

 #define public #define private static 

更新:

对于那些认为做上述事情是个坏主意的人,我同意。 但它确实解释了为什么某人可能认为publicprivate是C关键字。

对于那些认为不能用C编译的人,试试这个:

 #include  #include  #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(直到它被certificate是错误的!:-))。

对于具有私有成员的C ++类,您可以执行类似的操作(被视为滥用),如下所示:

main.c

 #include  #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  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 

鉴于即使在构造函数(C语言中的结构成员中的函数)中也无法读取静态变量, 静态就不像私有了。

您只能在定义它们的代码部分中使用静态变量(在函数,结构中……)。

Interesting Posts