i++ vs. ++i
후치를 우선적으로 사용하고
이 줄에서 증가하면 안 되는 특별한 경우에만 전치를 사용하는 것이 좋다
break vs. continue
break는 가장 가까운 반복문 '하나'를 빠져나간다
continue는 아래 부분을 생략하고 다시 반복문 처음(조건) 부분으로 간다
이중 반복문
이중 반복문의 결과는 아래의 과정을 거치면 쉽게 파악할 수 있다
1. 줄의 개수를 파악하고 인덱싱(번호매김)
2. 각 줄의 칸 개수를 파악하고 인덱싱
3. 각 칸의 출력을 파악
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 2; ++i)
{
for (j = 1; j <= 3; ++j)
{
printf("%c ", '*');
}
printf("\n");
}
return 0;
}
goto-label문
goto 구문을 만나면, 해당 label로 점프를 한다
goto ATTACK;
... 건너뜀 ...
ATTACK:
명령어1;
...
goto-label문은 잘못 사용하면
무한 반복문 혹은 스파게티 코드가 될 가능성이 높기 때문에
아래와 같은 올바른 사용법을 추구하는 것이 좋다
1. 항상 goto 아래에 label 적기(위에는 절대 적지 않기)
2. 삼중 반복문의 탈출
3. 코드 롤백
매크로 상수
특정 변수를 보면 곧바로 특정 값으로 치환하게끔 하는 문법이다
상수는 가독성이 떨어지기 때문에 매크로 상수를 적극 이용하는 것이 좋다
#define ROUGH_PI (3.141592)
#define PI (2 * arctan(1))
int a = ROUGH_PI * 100;
int b = PI / 180;
매크로 상수 주의점
매크로 상수의 경우 반드시 괄호를 사용하는 것이 좋다
우리가 원하는 대로 연산의 우선순위가 작동하지 않는 경우가 발생할 수 도 있기 때문이다
// 괄호 X
#define SQUARE(x) x * x
...
int result = SQUARE(3 + 1);
// 우리가 원하는 연산의 우선순위가 적용되지 않음
//int result = 3 + 1 * 3 + 1;
// 괄호 O
#define SQUARE(x) ((x) * (x))
...
int result = SQUARE(3 + 1);
// 우리가 원하는 연산의 우선순위가 적용
// int result = (3 + 1) * (3 + 1);
'C > [코드조선] C 핵심' 카테고리의 다른 글
[C] 스코프와 스택프레임 (0) | 2024.02.06 |
---|---|
[C] 2차원 배열 (0) | 2024.02.05 |
[C] 조건문과 Intentional-Fallthrough (0) | 2024.02.03 |
[C] 연산자 (0) | 2024.02.02 |
[C] 탈출 문자열(Escape Sequence)과 서식 지정자(Format Specifier) (0) | 2024.02.01 |