문제

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 언어로 구조물의 구성원을 입력하는 함수).

코드가 정의 된 코드 부분에서 (함수, 구조물, ...) 만 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top