문제
ANSI C(또는 다른 C)에 '개인' 또는 '공개' 키워드가 있습니까? 아니면 C++(및 Java, C# 등)에만 추가되었습니까?
해결책
private
C89 또는 C99 키워드가 아닙니다. 보다 C Wikibooks의 프로그래밍/참조 테이블*.
또한 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);
}
메시지.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
공전 좋아하지 않습니다 사적인, 당신이 건설자 의 수업 (C 언어로 구조물의 구성원을 입력하는 함수).
코드가 정의 된 코드 부분에서 (함수, 구조물, ...) 만 사용할 수 있습니다.