programing

C에 C++가 아닌 "struct" 키워드가 필요한 이유는 무엇입니까?

randomtip 2022. 8. 10. 19:42
반응형

C에 C++가 아닌 "struct" 키워드가 필요한 이유는 무엇입니까?

난 항상 여기서 무슨 일이 일어나고 있는지 좀 혼란스러웠어.

#include <stdio.h>

int main() {  
    timeval tv;
    tv.tv_sec = 1;

    for (;;) {
        select(0, 0, 0, 0, &tv);
        printf("%s\n", "Hello World!");
    }
}

만약 그게 정리되지 않았다면, 그냥 간단한 예시로 썼을 뿐이에요.

이와 같은 코드는 structure timeval을 사용하기 전에 키워드 structure를 추가하지 않으면 gcc에서 컴파일되지 않습니다.반면 g++는 그대로 잘 처리합니다.

이것이 C와 C++의 구조 처리 방법의 차이일까요, 아니면 컴파일러의 차이일까요? (저는 C++ 지향성이 매우 강하기 때문에 C의 구조를 이와 같은 라인에서 사용하는 것은 항상 약간 당혹스러웠습니다.)

통사적으로 양쪽 모두 취급struct거의 비슷해요.C++ 만이 추가 규칙을 추가해, 이 규칙을 생략할 수 있습니다.struct(그리고class) 키워드를 지정합니다.

애매한 점이 있는 경우는, C++에서도,struct키워드를 지정합니다.악명높은 예로는statPOSIX 시스템 상에서struct stat및 함수stat.

대부분의 유효한 C 프로그램이 유효한 C++ 프로그램일 정도로 C와 호환되는 OO 지향 언어의 C++(또는 "C with classes")의 원래 아이디어를 생각해 보십시오.

C++는 C부터 시작하여 클래스 모델을 구축했습니다.struct다음과 같은 기능을 추가합니다.

  1. 상속(C에서 "상속"할 구조체의 첫 번째 멤버를 가지고 근접할 수 있습니다).
  2. 정보 숨김(통해)public,private기타)
  3. 멤버 메서드(원래 매크로에 의해 구조체 외부의 C코드로 변환된 것)this파라미터 - 많은 구현이 아직 실제로 유사합니다.)

이 시점에서 두 가지 문제가 있었다.첫 번째는 C에는 정보가 숨겨져 있지 않기 때문에 C++ 관점에서는 모든 것이 공개되어 있기 때문에 디폴트액세스가 공개되어 있어야 한다는 것입니다.OOO를 사용하려면 기본적으로 개인으로 설정해야 합니다.이 문제는 다음과 같이 추가함으로써 해결되었습니다.class거의 똑같다struct디폴트는 입니다.private보다는public.

다른 하나는 이 OO의 관점은timeval또는 같은 "동일한" 상에 있는 다른 클래스/클래스/클래스int또는char특별한 코드에 지속적으로 주석을 달지 않아도 됩니다.이것은 반드시 배치해야 하는 규칙을 완화함으로써 해결되었다.struct(또는class는 해당 할 때 의 이름 는 해당 유형의 변수를 선언할 때 해당 유형의 이름 앞에 표시됩니다. 때문에, 「 」는 할 수 없습니다.struct timeval tvtimeval tv.

후 나 C#등의 C 예를 Java' C#')만 영향을 timeval tv는 C의 유효한 입니다.

두 언어의 디자인 결정이라고 할 수 있습니다.

C의 구조는 구조화된 레코드일 뿐이며 사용방법이 빌트인 타입과는 다릅니다.

C++ 에는 ctors 와 연산자의 오버로드가 있기 때문에, 타입으로서 기능합니다.

struct foo x;         // create a structure of pattern foo
typedef foo foo_type; // "define" a type
foo_type x;           // create an instance of type foo_type

C++:

foo x; // create an instance of type foo

로 ★★★★★★★★★★★★★★★★★★★★.struct fooC++라고 합니다. struct foodtypedef'd'd'd'보다 구문 이 더 .foo이름 짓기가 더 쉬우니까.

그냥 C처럼 생겼죠.따라서 다음 패턴은 C에서 매우 일반적입니다.

typedef struct YourStructure
{
   int x;
   // more fields
} YourStructure;

그런 다음 C++와 같은 방법으로 참조할 수 있습니다.

단순히 언어의 차이일 뿐입니다.C++는 구조 구문에 있어 보다 관대합니다.

물론 C의 방식이 먼저였다.나 클래스는 에 C++의 구조나 클래스가 필요하기 때문에 매우 입니다.class모든 클래스 변수를 사용하여 둘 다 단순화되었습니다.

언급URL : https://stackoverflow.com/questions/8422775/why-does-c-need-struct-keyword-and-not-c

반응형