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
키워드를 지정합니다.악명높은 예로는stat
POSIX 시스템 상에서struct stat
및 함수stat
.
대부분의 유효한 C 프로그램이 유효한 C++ 프로그램일 정도로 C와 호환되는 OO 지향 언어의 C++(또는 "C with classes")의 원래 아이디어를 생각해 보십시오.
C++는 C부터 시작하여 클래스 모델을 구축했습니다.struct
다음과 같은 기능을 추가합니다.
- 상속(C에서 "상속"할 구조체의 첫 번째 멤버를 가지고 근접할 수 있습니다).
- 정보 숨김(통해)
public
,private
기타) - 멤버 메서드(원래 매크로에 의해 구조체 외부의 C코드로 변환된 것)
this
파라미터 - 많은 구현이 아직 실제로 유사합니다.)
이 시점에서 두 가지 문제가 있었다.첫 번째는 C에는 정보가 숨겨져 있지 않기 때문에 C++ 관점에서는 모든 것이 공개되어 있기 때문에 디폴트액세스가 공개되어 있어야 한다는 것입니다.OOO를 사용하려면 기본적으로 개인으로 설정해야 합니다.이 문제는 다음과 같이 추가함으로써 해결되었습니다.class
거의 똑같다struct
디폴트는 입니다.private
보다는public
.
다른 하나는 이 OO의 관점은timeval
또는 같은 "동일한" 상에 있는 다른 클래스/클래스/클래스int
또는char
특별한 코드에 지속적으로 주석을 달지 않아도 됩니다.이것은 반드시 배치해야 하는 규칙을 완화함으로써 해결되었다.struct
(또는class
는 해당 할 때 의 이름 는 해당 유형의 변수를 선언할 때 해당 유형의 이름 앞에 표시됩니다. 때문에, 「 」는 할 수 없습니다.struct timeval tv
수 timeval 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 foo
C++라고 합니다. struct foo
dtypedef'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
'programing' 카테고리의 다른 글
&errno는 합법 C입니까? (0) | 2022.08.10 |
---|---|
Trie 구현 (0) | 2022.08.10 |
Vuex | 커밋 방식으로 전달할 수 있는 옵션은 무엇입니까? (0) | 2022.08.10 |
open()이 잘못된 권한으로 파일을 만드는 이유는 무엇입니까? (0) | 2022.08.10 |
Vue JS 애플리케이션의 API에서 데이터를 가져오는 테스트 코드 (0) | 2022.07.21 |