'private'是C关键字吗?

rip*_*234 17 c private

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

str*_*ger 30

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

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

*需要更好的参考!
**其实,C89"借用"了constvolatile关键字从C++.同样地,C99"借用"的inline关键字,并且还增加了_Bool_Complex(如C++的boolcomplex,分别地)[引证-需要].

  • 它们是C的演变,它们的大部分语法都来自C。 (2认同)

Tof*_*eer 12

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

#define public 
#define private static
Run Code Online (Sandbox Code Playgroud)

更新:

对于那些认为做上述事情是个坏主意的人,我同意.但它确实解释了为什么有人会想public或是privateC关键词.

对于那些认为不能用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");
}
Run Code Online (Sandbox Code Playgroud)

对于那些认为它不能用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);
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 我没有说我支持它......有些人也把它们的头埋在烤箱里......但你可能会看到已经完成它的代码 (4认同)
  • 他们不应该这样做. (2认同)
  • @litb,它不会在常见的 C++ 代码中编译,因为“private:”会变成“:”,这会导致语法错误。@Dan,C/C++ 不是一种语言。它会在 C 中编译得很好,除非你包含一些 C++ 头文件(在这种情况下,无论如何都应该有保护,否则用户疯了)。 (2认同)