분류 전체보기

    2013.03.26_컴파일시깨알팁

    깨알팁 cl *.c // 현재 디렉토리에 있는 모든 c 확장자명을 가진 파일을 실행파일까지 // 컴파일한다. cl /c 함수명.c // 함수명.c 를 오브젝트( .obj) 파일까지 컴파일한다. cl /P 함수명.c // 함수명.c 를 전처리단계(프리프로세싱) , 순수C( .i)파일까지 // 컴파일 한다. cl 함수명.obj 함수명.obj .. .. // 다 모아서 실행파일을 만든다.

    2013.03.26_헤더파일쓰는이유

    1. #include "헤더파일이름" 을 사용 // 현재 파일안에있는 smart.h 를 찾는다. 2. 헤더파일을 세번불러봄( 실험 하는거 ) 3. #ifndef 전처리용 if 문으로 ( if not define _SMART_H_ = _SMART_H 가 정의되어있지 않으면 이라는 뜻) #endif 전처리용 if 문 종료 , 전처리용 if 문을 사용하면 헤더파일을 호출시에 여러번 호출이 안뜨거나 애초에 함수가 정의되어있지 않으면 실행을 시키지 않으므로, 컴파일 할때 빠르다. 4. 위의 전처리용 if 문을 사용해서 경고도 안뜨고 깔끔하게 나왔다!

    2013.03.26_링크란무엇이며,도스창에서 링크는 어떻게하는가!?

    1. 각 함수파일을 obj까지(Compile만!!) 하는 방법은 cl /c 떙떙.c ( ex: cl /c main.c , cl /c smart.c ) 하면 된다. 2. 컴파일만 해놓은(.obj) 따로 뜯어져있는 함수를 모아서 연결해주는 것을 '링크' 라고 한다. 이 방법은 도스창에 cl main.obj smart.obj 하면된다. ※ 활용 : 만드는 부분을 분할해서 일을 할수있다. 그리고 회사가 달라 소스는 주지않고, 컴파일한 .obj 파일만 줄수도 있으며, 수정이 필요한 경우 수정한 부분만 포함된 소스파일을 컴파일 할 수 있기 때문에 컴파일시 시간이 줄어든다.

    2013.03.26_제일위에 입력되지 않은 함수가 쓰일수있는 이유(ex: printf() )

    1. printf(); 가 적히면 에 가서 프로토타입( int printf( ); ) 과 비교를해서 문법이 맞는지 확인한후 순수C 로 넘어간다( .i ). 어셈블러가 컴파일을 해주고, 없는 함수나 함수가 잘못 호출을 했을시에 .exe 까지 가지못하고, 오브젝트까지 만들어진다. 오브젝트까지 (.obj)모두 완료하면 링크를 통해 실행파일(.exe)이 만들어진다. 2. Clibrary 에 미리 컴파일해서 모아두면, obj에서 씀

    2013.03.26_함수의인수_자료형맞춰주기!!

    1. main 함수에서 선언한 인수와 average 함수의 인수리스트 의 자료형이 int 와 short 로 다르므로, 경고메세지를 띄운다. 실행을 하여도 값이 제대로 나오지 않는다. 자료형을 각각 맞춰줘야 한다!

    2013.03.26_함수도 주소를 가진다!!

    1. 각각 변수의주소와 함수의주소를 심볼테이블로 따로 만든다. 타입 이름 주소 int A1(변수) 12FF땡땡 void A2(함수) 4010땡땡 2. 함수의 5가지 영역(Code , Data, BSS, Heap, Stack) 에서 함수의주소는 Code 에 저장이 되고, 변수의주소는 Stack에 저장이 된다. (그림1에서 보는 것 처럼 printf 문에서 입력된 글수를 숫자(정수)로 받아지는 것은 int 형 함수이기 때문이다.) 함수는 함수대로, 변수는 변수대로 따로 메모리에 저장이 된다.