for 문 - 초기식, 조건식, 증감식, volatile, 최적화
- for(초기식; 조건식; 증감식) 명령문
→ 초기식: 처음 한번만 수행되는 식(식을 여러개 쓸 수도 있다. i=1,j=0), 식의 생략도 가능
→ 조건식(while문과 동일)
→ 명령문: 끝에 매번 수행(초기식과 마찬가지로 식을 여러개 쓸 수 있다.), 식의 생략 가능
초기식, 조건식, 증감식은 괄호로 묶고, 그 사이에 세미콜론을 찍는다. 초기식에는 제어변수의 초기값을 설정한다. 조건식은 논리식으로 반복을 계속할 것인지 중단할 것인지 여부를 결정한다. 증감식에는 제어변수의 값을 증가 도는 감소시킨다.
#include<stdio.h>
int main()
{
int i;
for(i=1,j=100;i<=5;++i,j=j+100) /* ① 조건식으로, 매번 반복할 때마다 논리식을 계산하여 제어변수 i의 값이 5보다 작거나 같으면(참) 명령문을 수행하고 거짓이면 반복을 끝내고 다음의 명령문을 실행한다. ② 초기식과 조건식에는 식을 여러개 쓰거나 생략할 수 있지만 조건식에는 하나의 식만 들어갈 수 있다.*/
{
printf("%d\t",i); // 한줄이므로 중괄호를 생략할 수 있지만 중괄호를 사용하는 쪽이 한눈에 보기에 훨씬 좋다.
}
putchar('\n'); // for문이 끝나고 한번 수행
printf("%d\t",j); // j의 값이 출력된다. → 600
return 0;
}
⇒ for문의 경우 (i=1,j=100;i<=5;++i,j=j+100)는
for(i=1,j=100;
i<=5;
j=j+100) 과 같다.(하지만 이렇게 쓰는 것은 역시 한눈에 보기에 좋지 않으므로 사용하지는 않는다.)
⇒ 위의 for문을 while문으로 바꾸어 보면 (①번만)
i=1; // 초기식
while(i<=5) // 조건식
{
printf("%d\t",i);
++i; // 증감식
}
으로 되며, for문과 같은 동작을 수행한다.
⇒ 위의 for문을 (①번만)
i=1; // 초기식
for(;i<=5;) // 조건식
{
printf("%d\t",i);
++i; // 증감식
}
로 써도 역시 동일하다.
for문 흐름도(flow chart)
① 초기식 - 처음 한번만 실행된다.
② 조건식 ③증감식 ④ 출력 → ②, ③, ④가 조건내에서 반복된다.
⇒ for(i=1;i<=5000;++i); → for문 뒤에 바로 ;(세미콜론)을 붙이면 50000까지 증가하는 과정만을 반복한다.
→ 그러나 요즘의 컴파일러는 최적화를 시켜 일일이 계산하지 않고 50000을 바로 출력해 낸다.
→ 최적화는 컴파일러에 따라 CPU에 따라 다른 결과를 내는 경우가 얼마든지 있다.(컴파일러는 gcc 등의 무료 프로그램 보다는 유료 컴파일러 등이 더 낫다. - 하지만 gcc의 경우 세상에서 가장 방대한 컴파일러이다.)
⇒ 최적화: 시간제한을 줄이는 것.
→ CPU와 Memory, Bus 중 CPU 내부가 가장 빠르다. 그래서 CPU에서 버스를 거쳐 메모리를 왔다 갔다 하며 반복하는 계산은 CPU 내에서 하는 계산보다 느리며, 그렇기에 CPU안에는 캐시가 있어 그 안에 값을 두어 계산을 하며 최적화를 한다.
⇒ volatile → 최적화 하지 않는다.(캐시에 집어넣지 않는다.)
→ volatile int i; // 변수 i를 최적화 하지 않는다.(→ 캐시에 집어넣지 않고 CPU가 버스를 통해 메모리를 이동하며 계산한다. 임베디드에서 주로 쓰인다.)
'내장형 하드웨어 > C언어' 카테고리의 다른 글
for문 (초기식과 증감식의 변형, 무한반복문) (0) | 2011.04.13 |
---|---|
VMware player 설치, 리눅스 명령어 (0) | 2011.04.11 |
심블 테이블 (symbol table), while문, 디버깅, (0) | 2011.04.07 |
visual studio 6.0 실행, 디버깅, Execute Program, Breakpoint, run-time error (2) | 2011.04.06 |
BricxCC를 이용한 마인드 스톰 구동 첫시간 (0) | 2011.04.05 |