Superkkt Blog

연산자 우선순위는 우선순위표 참조하고.. 여기서는 결합순서에 대해서만 알아보자.

! ~ ++ -- +(부호) -(부호) *(포인터) &(주소) (type) sizeof

위 연산자들은 C에서 두번째로 우선순위가 높은 연산자들로서 같은 줄에 있기 때문에 같은 우선순위를 가지게 된다.

그럼 위에 나열된 연산자들은 같은 우선순위를 가진다고 했는데 이들이 하나의 문장에 같이 나오게 되면 누가 우선적으로 처리가 될까? 이것이 결합순서이다.

우선순위표에서 위 라인의 결합순서는 "우에서 좌"로 되어있다. 즉, 오른쪽부터 우선적으로 처리하다는 뜻이다. 이제 예제를 몇개 살펴보자.

static int
parse_ndir(char *ndir, char **host, char **user, char **path)
{
  *host = &ndir[6];

  *user = strchr(*host, '/');
  if (!*user)
       return -1;
  **user = '\0';
  (*user)++;

  *path = strchr(*user, '/');
  if (!*path)
       return -1;
  **path = '\0';
  (*path)++;

  return 0;
}


위 코드에서 **user = '\0'; (*user)++; 이 두 라인을 한줄로 합쳐보자.

**user++ = '\0';

그냥 이렇게 하면 될까? *(포인터)와 ++는 같은 우선순위를 가지며 결합순서는 우에서 좌라고 했다. 그러면 위 라인은 아래와 같이 처리된다.

*(*(user++)) = '\0';

의도했던 바가 아니다. 고로 아래와 같이 해야 한다.

*(*user)++ = '\0';   /*  same as *((*user)++) = '\0'; */
2006/10/16 10:12 2006/10/16 10:12

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

Leave a Comment