题
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语言编写结构成员的函数)。
您只能在代码中定义它们的部分使用静态变量(在函数,结构中......)。
不隶属于 StackOverflow