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

有帮助吗?

解决方案

private 不是C89或C99关键字。请参阅维基教科书上的C编程/参考表 *。

此外,C与Java和C#没有任何关系(实际上,也不是C ++)。然而,反过来却不正确 - 例如,C ++从C增长。

*需要更好的参考!
**实际上, C89“借用了”来自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 ++标准的这一部分,它是未定义的行为:

  

包含a的翻译单元   标头不得包含任何宏   定义声明或定义的名称   在那个标题中。也不应该这样   翻译单元定义宏   名称与关键字词汇相同。

所以上面和下面的例子不需要在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
假设 静态不像私有,因为即使在构造函数中也无法读取静态变量class (用C语言编写结构成员的函数)。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top