📌 제 컴파일러는 == 대신 =를 써도 경고 메세지를 출력하지 않던데, 컴파일러가 이런 점을 강제로 경고로 알려주게 만들 수 있나요?
- 대부분의 컴파일러는 = 연산자를 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 |