본문 바로가기
📚 STUDY/🔥 C

Q&A (들여쓰기 방식, switch 문 작성 방식)

by 엄지잉 2024. 9. 5.

📌 제 컴파일러는 == 대신 =를 써도 경고 메세지를 출력하지 않던데, 컴파일러가 이런 점을 강제로 경고로 알려주게 만들 수 있나요?

- 대부분의 컴파일러는 = 연산자를 if문에서 잘못 사용한 경우를 잡아줌.

  ex) GCC 컴파일러는 -Wparentheses 기능 or -Wall(모든 경고 메시지 표시) 기능으로 위 경우를 잡아줌.

- GCC를 사용할 때, 의도적으로 = 연산자를 써준 경우 괄호를 두 번 해주면 경고 메시지가 뜨지 않게 해줄 수 있음.

if ((i = j)) …

 

 

📌 C언어 책들마다 복합문에서 들여쓰기하는 방식이 다르던데, 어떤 방식이 제일 좋은 방식인가요?

The New Hacker's Dictionary에 의하면 크게 네 가지 들여쓰기 및 중괄호 표기법이 있음.

K&R 방식 : 왼쪽 중괄호가 줄의 마지막에 표기됨.

if (line_num == MAX_LINES) {
    line_num = 0;
    page_num++;
}
  • 장점 : 왼쪽 중괄호를 새 줄이 아니라, if와 같은 줄에 놓음으로써 프로그램이 좀 더 압축되어 보임.
  • 단점 : 왼쪽 중괄호의 위치를 쉽게 파악하기에 어려울 수 있음.
  • Java에서 흔히 사용되는 방식임.

 

올맨Allman 방식 : 왼쪽 중괄호를 새 줄에 놓는 방식

if (line_num == MAX_LINES)
{
    line_num = 0;
    page_num++;
}
  • 장점 : 중괄호의 짝을 손쉽게 찾을 수 있음.

 

화이트스미스Whitesmiths 방식 : 중괄호들도 들여쓰는 방법

if (line_num == MAX_LINES)
    {
    line_num = 0;
    page_num++;
    }

 

 

그누GNU 방식 : 중괄호를 들여쓰고, 그 안의 구문들은 더 들여쓰기 함.

if (line_num == MAX_LINES)
    {
        line_num = 0;
        page_num++;
    }

 

어떤 방식을 택하는지는 취향차이

뭘 선택하느냐보다, 한 방식을 그대로 유지하는 것이 더욱 중요함.

 

 

📌 만약 i가 int형 변수이고 f가 float형 변수일 때, 조건식 (i > 0 ? i : f)은 무슨 형식인가요?

- 조건식에서 int, float형이 동시에 사용되면 조건식은 float형임.

- 만약 i > 0이 참이라면, 조건식의 값은 float형으로 변환된 i의 값임.

 

 

📌 C99는 왜 불리언형을 그렇게 밖에 이름을 못 지었나요?

- boo, boolean 같이 흔한 이름이 아닌, _Bool로 지은 이유는 현존하는 수많은 프로그램들이 이미 정의해서 사용하고 있어, 컴파일 에러를 낼 수 있기 때문임.

 

 

📌 그렇다고 _Bool이 옛날 프로그램이 영향을 안 줄거라는 보장은 어디있죠?

- C89 표준에선 밑줄로 시작하고, 그 다음에 대문자가 오는 변수 이름들을 추후에 사용하려고 막아놓음.

 

 

📌 switch문이 대부분의 경우 이런 구조를 갖는다고 하셨는데, 그럼 다른 구조들도 있나요?

- switch문에서 case라는 말 없이도 부호를 사용할 수 있고, 이는 여러 재미있는 상황을 연출해낼 수 있음.

 

ex) default를 실수로 오타낸 경우

switch (…) {
    …
    defualt: …
}
  • 컴파일러는 defualt를 그냥 평범한 부호로 인식하고, 뭐가 잘못됐는지도 모르고 넘어갈 수도 있음.

 

📌 switch문을 들여쓰는 여러 방법들이 있던데, 어떤 방법이 제일 좋나요?

- 크게 2가지 방법이 있음.

구문을 case가 있는 줄에서 시작해서 작성하는 것 : 조건이 적고, 각 조건마다 구문이 적을 때 사용하는 것이 좋음.

switch (coin) {
case 1:  printf("Cent");
         break;
case 5:  printf("Nickel");
         break;
case 10: printf("Dime");
         break;
case 25: printf("Quarter");
         break;
}

 

 

구문을 조건부호 밑에부터 들여쓰고 작성하는 것 : 조건이 상당히 많고, 구문들도 복잡하거나 많을 때 사용하는 것이 좋음.

switch (coin) {
case 1:
    printf("Cent");
    break;
case 5:
    printf("Nickel");
    break;
case 10:
    printf("Dime");
    break;
case 25:
    printf("Quarter");
    break;
}

 

 

 

💡 본 내용은 K.N.King의 C Programming: A Modern Approach 책을 참고하였습니다.

'📚 STUDY > 🔥 C' 카테고리의 다른 글

[6-2] do문  (0) 2024.09.05
[6-1] while  (0) 2024.09.05
[5-3] switch문  (0) 2024.09.05
[5-2] if문  (2) 2024.09.05
[5-1] 논리표현식  (0) 2024.09.04