source

화살표 연산자 vs.도트 연산자

goodcode 2022. 8. 19. 20:47
반응형

화살표 연산자 vs.도트 연산자

C의 화살표 연산자(->)는 불필요하다고 생각합니다.점 연산자(.)로 충분합니다.다음 코드를 사용합니다.

typedef struct {
    int member;
} my_type;

my_type   foo;
my_type * bar;
int       val;

val = foo.member;
val = bar->member;

화살표 연산자를 사용하여 바를 참조 해제해야 합니다.하지만, 저는 이 글을 쓰는 것을 선호합니다.

val = bar.member;

구조에서 '구성원'을 끌어오려는 것인지 아니면 포인터에서 구조물로 끌어오려는 것인지에 대해서는 모호함이 없습니다.그러나 특히 코드를 리팩터링할 때 잘못된 연산자를 사용하기 쉽습니다(예를 들어 foo에서 복잡한 작업을 하고 있기 때문에 코드를 새로운 함수로 이동하고 foo에 포인터를 전달합니다).foo가 포인터인지 아닌지는 신경 쓸 필요가 없다고 생각합니다.컴파일러가 세세한 부분까지 신경 쓸 수 있습니다.

그래서 질문입니다.C 언어에서 ->를 삭제하는 것이 더 간단하지 않을까요?

'화살표' 연산자는 통사당이다. bar->member와 같다(*bar).member차이가 나는 이유 중 하나는 유지 보수성입니다.도트 연산자와 구별되는 화살표 연산자를 사용하면 어떤 변수가 포인터인지, 어떤 변수가 아닌지를 훨씬 쉽게 추적할 수 있습니다.항상 사용할 수 있습니다..컴파일러에게 올바른 일을 시키도록 할 수는 있지만, 그렇게 하면 언어가 더 간단해질 것 같지는 않습니다.컴파일러가 문자 그대로 쓴 것이 아니라 당신이 말한 것을 해석할 수 있도록 신뢰하는 것은 보통 좋지 않은 결과를 낳는다.

아니요, 제거하기가 쉽지 않을 겁니다.->언어로부터, 만약 그렇다면 메가톤의 코드를 다시 작성해야 한다는 단순한 이유 때문이다.단, 그것을 정의할 수 있다.p.x와 동등하다p->x한다면p는 포인터입니다.이 코드는 현재 불법이기 때문에 하위 호환성이 있는 변경입니다.

언급URL : https://stackoverflow.com/questions/10036381/arrow-operator-vs-dot-operator

반응형