티스토리 뷰
반응형
for문 실행 순서를 까먹었다. 그래서 확인. 인터넷에 찾으면 나오겠지만 요즘 괜히 직접 확인해보는 악취미가 생겼다. (gcc 4.4.7 / gdb 7.2)
#include "stdio.h" int main(void) { int i; for(i=0; i<10; i++); }
(gdb) set disassembly-flavor intel (gdb) disas main Dump of assembler code for function main: 0x08048394 <+0>: push ebp 0x08048395 <+1>: mov ebp,esp 0x08048397 <+3>: sub esp,0x10 0x0804839a <+6>: mov DWORD PTR [ebp-0x4],0x0 0x080483a1 <+13>: jmp 0x80483a7 <main+19> 0x080483a3 <+15>: add DWORD PTR [ebp-0x4],0x1 0x080483a7 <+19>: cmp DWORD PTR [ebp-0x4],0x9 0x080483ab <+23>: jle 0x80483a3 <main+15> 0x080483ad <+25>: leave 0x080483ae <+26>: ret End of assembler dump. (gdb)
for 문
i = 0 → i < 10 판단 → 아닐시 내부문 실행 후 i++, 반대의 경우 for문 종료
하는김에 while이랑 do-while도 해봤다.
#include "stdio.h" int main(void) { int i; while(i < 10) { i++; } return 0; }
(gdb) set disassembly-flavor intel (gdb) disas main Dump of assembler code for function main: 0x08048394 <+0>: push ebp 0x08048395 <+1>: mov ebp,esp 0x08048397 <+3>: sub esp,0x10 0x0804839a <+6>: jmp 0x80483a0 <main+12> 0x0804839c <+8>: add DWORD PTR [ebp-0x4],0x1 0x080483a0 <+12>: cmp DWORD PTR [ebp-0x4],0x9 0x080483a4 <+16>: jle 0x804839c <main+8> 0x080483a6 <+18>: mov eax,0x0 0x080483ab <+23>: leave 0x080483ac <+24>: ret End of assembler dump. (gdb)
while 문
i 초기화를 안해줬네; 흐름 파악하는데는 노상관
i = 0 → i < 10 판단 → 아닐시 내부문 실행 후 i++, 반대의 경우 while문 종료. for랑 똑같다.
#include "stdio.h" int main(void) { int i; do { i++; } while(i < 10); }
(gdb) set disassembly-flavor intel (gdb) disas main Dump of assembler code for function main: 0x08048394 <+0>: push ebp 0x08048395 <+1>: mov ebp,esp 0x08048397 <+3>: sub esp,0x10 0x0804839a <+6>: add DWORD PTR [ebp-0x4],0x1 0x0804839e <+10>: cmp DWORD PTR [ebp-0x4],0x9 0x080483a2 <+14>: jle 0x804839a <main+6> 0x080483a4 <+16>: leave 0x080483a5 <+17>: ret End of assembler dump. (gdb)
do while 문
마찬가지로 i 초기화를 안해줌; 하지만 역시나 흐름 파악하는데는 노상관
for, while이랑은 조금 다르다. 일단 for, while은 내부문 실행 전에 조건검사를 한번하는데 do-while은 내부문을 한번 실행하고 조건검사.
끝. 이젠 안까먹겠지.
반응형
'개인공부 > C and C++' 카테고리의 다른 글
[Qt 4.8] 01. Hello World 프로그램 (1) | 2014.11.15 |
---|---|
[Qt 4.8] 00. Linux 설치 환경 Setting하기 (0) | 2014.11.15 |
[C 언어] rand(), srand()를 사용한 난수 발생 예제 (2) | 2014.09.18 |
fseek와 ftell 함수 (0) | 2014.01.17 |
구조체 파일 위치 지시자 (0) | 2014.01.17 |
struct member alignment(구조체 멤버 정렬)에 대해 (0) | 2014.01.16 |
realloc, calloc 함수 및 예제 (1) | 2014.01.16 |