• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

opendir.c 에서 괄호 관련

21.06.25 19:35 작성 조회수 160

1

강의 재미있게 듣고 있습니다. 

while (entry = readdir(dp)){

괄호를 위와 같이 하면 에러가 납니다. 왜 그런가요?

while ((entry = readdir(dp))){ ... 하나씩 더 해주어야 하는 이유가 궁금합니다.

현재 위 내용을 듣고 있어서 ... 이후 내용에 아래 내용 포함되나요?

fork(), kill, wait, waitpid, exec 등도 다루어 지나요?

POSIX threads 

답변 1

답변을 작성해보세요.

1

안녕하세요, yong oh님.

먼저 첫번째 코드를 놓고 얘기를 해볼게요

while (entry = readdir(dp)){

아시겠지만, if문이나 while문 다음에는 괄호 안에 condition이 나옵니다. 이 코드의 의미는 "readdir()의 결과를 entry에 저장하고, 그 값이 NULL인지 아닌지에 따라 while loop을 돌아라"라는 의미입니다. 사실 위쪽의 코드도 문법적으로 보면 틀린 것은 아닙니다. 하지만 컴파일러(gcc)는 condition 내에 assignment가 있으니 필요하다면 괄호를 사용하라는 경고를 띄우게 되죠. 많은 사람들이 condition 부분에서 == 대신 =를 사용하는 실수를 많이 저지르니 condition에 assignment가 들어가면 경고 처리를 해주는 것입니다. 옵션에 따라 이 경고가 포함될 수도 있고, 포함되지 않을 수 있습니다. 또 경고로 끝날 수도 있고 에러로 처리될 수도 있죠.

그래서 코드를 좀 더 명확히 작성한 것이 괄호를 한번 더 붙여준 아래 코드입니다.

while ((entry = readdir(dp))){

이 코드는 할당 부분에 괄호를 붙여줌으로써 명시적으로 할당임을 나타낸 것입니다. 할당된 결과가 while문의 condition으로 처리됩니다. 따라서 첫번쨰 코드와 같은 경고가 발생하지 않는 것입니다.

그리고 fork, kill과 같은 process 관련 부분과 pthread 관련한 부분은 "섹션4. 프로세스와 쓰레드"에서 다루게 됩니다. 

질문에 대한 답이 됐을까요? 더 궁금한 내용 있으시면 추가 질문 남겨주세요~ :D

smile2000님의 프로필

smile2000

질문자

2021.06.26

아 네^^

친절한 답변 감사드립니다.ㅎ