본문 바로가기
코스웨어/12년 내장형하드웨어

프로그램의 실행과 오류 정리

by 알 수 없는 사용자 2012. 7. 18.
728x90
반응형

제4장 프로그램의 실행과 오류

컴파일 5단계

1. 전처리 (processer) 단계 :#include, #define와 같은 명령어를 먼저 처리한다.    

(확인)=> #include <stdio.h>  stdio.h의 내용이  #defirn pi 3.14  소스에 pi가 3.14로 대체된다.

헤더파일 지정시 1. < > 기본디렉토리 2. "  " 현재디렉토리에서 head 파일을 참조 한다.

분할 컴파일 // 함수 만들기 시에 사용 개념 잡자.

추가내용) .i 파일이 생성 수순 c언어가 남는다. 키워드를 쓸수 있게 전역 함수가 설정되어 있음 ex) printf, scanf등

2. 컴파일 : 기계어의 중간 단계인 어셈블리어 파일을 만든다. (임시파일 확인 필요)

컴퓨터가 읽을 수 있는 숫자로 치환 (확인 해야)

3. 어셈블리: 컴퓨터가 이해 할수 있는 기계어코드를 읽어 목적코드를 생성한다.(용어의     생소)

4. 링크 : 여러개의 파일로(함수 또는 프로그램) 나누어 하나의 프로그램을 이루고 있거     나,라이브러리 함수 등이 존재 할때, 서로 연결 시켜서 실행 가능한 프로그램을 생성

5. 실행파일 : 그 결과 실행파일이 생성된다.

 

컴파일 옵션

gcc 분할, cl 한덩어리

1. cl 옵션 

cl /P : .i 생성    /FA : .asm .obj 생성     /o : .obj 생성  /c 컴파일만

2. gcc 옵션

gcc -o : 실행파일 생성     -c : .o파일 생성     --save-temps : 중간단계 파일들 모

두생성 한다. (리눅스는 -o시 중간 파일을 지운다. ) 

의미 옵션중 cl /c, gcc -c는 컴파일 5단계중 목적파일 생성 까지 이상없을때 에러 없이 실행 된다. 즉, 문법적이 오류가 없다는 뜻이다

여기서 오류의 3가지에 대해 알아보자 => 오류 분서및 찾아내는 능력을 기르자. 

먼저 전처리 오류 

1. 전처리 이름을 잘못 쓰게 되면, 라인 번호를 보여주고 undefind or invalid # directive

(정확하지 않거나 효력없는 # 지시자)라는 메세지가 출력된다.

dos에서는 processor command 전처리 명령어가 잘못 됬다고 집어준다.

2. 전처리 > 하나를 빼면 expects (예상하다) < >를 잘못 됬다는 메세지가

dos는 > 빠졌다는 메세지가 출력 되고 있다.

두번째 c문법오류

1.return 명령문에 ; 를 적어 주지 않으면, parse(분석하다. 문법) 에러 라는 메세지로

} 전에 났다는 리눅스 , dos에서는 ; 가 빠졌다는 메세지 출력

2. return 명령문 이름을 잘못 쓰면, 명령문이 정의 되지(undeclared) 않았다는 메세지 출력되고 , 역시 parse에러라는 것을 알려 주고 있다. (0 전에 ㅋㅋ)

dos에서는 undeclared identifier (정의 되지 않은 지시자)라는 메세지 출력

printf는 표준라이브러리에 있는 함수로써 링크시 연결시켜 사용하게 되는데, 이를 잘못 적으면서 (링크오류) 함수호출를 못하는 것이다.

undefined reference to 'rintf' (''함수를 찾을 수 없다 )는 메세지 출력

dos에서는 LNK 링크 오류라는 것을 나타낸다.

(추가내용)  symbol표현 함수도 심볼테이블에 작성된다는 뜻을 type을 가진다.

*처음 시작하는 함수 이름 main으로 반드시 있어야 한다. c에서 main, win에서 winmain

등 이름은 다를 수 있다. 이것을 진입점(entry point) 이라고 한다.

 

 

 

 

 

 

728x90

'코스웨어 > 12년 내장형하드웨어' 카테고리의 다른 글

ARM  (0) 2012.07.18
2012. 07.17 일자 API 수업 정리자료 입니다. (과제 포함)  (0) 2012.07.18
문자열 함수 정리  (0) 2012.07.18
소스 인사이트 단축키 및 한글입력팁  (1) 2012.07.18
LCD와 타이밍도  (0) 2012.07.18
ARM LED 설정하기.  (0) 2012.07.18
매크로 함수와 #undef ->> 이동혁  (0) 2012.07.18
캐릭터LCD  (1) 2012.07.18