Language/C C언어 강좌 (함수의 호출과 실행 / average/분할컴파일/지역변수)
  • 728x90
    반응형

       

       

    C언어 Chapter 15.


     

       

    함수의 호출과 실행

     

    함수의 구성

    • 함수의 정의
    • 함수의 호출
    • 함수의 원형

     

    Ex) 두 정수를 입력 받아 평균값을 출력하는 프로그램으로 평균값은average()함수가 산출한다.

     

     

    프로그램의 설명

    • 함수의 정의

     

    float average(int n1, int n2 );

     

     반환자료형 함수이름 (인자);

     

     { 명령문 }

     

    avrg = average (num1, num2);

     

     함수이름 (인수 리스트);

     

    TIP : 인수의 개수는 ( , ) 로 구분한다.

     

     

    함수 호출의 실행 과정

     

     

     

    • average()함수의 호출
      • 호출된 average()함수를 피호출자, 호출한 main()함수를 호출자라고 부른다.
      • 함수의 호출과정에서 호출자는 피호출자에게 인수를 전달한다.
      • 호출자의 변수 num1과 num2의 값은 average()함수의 인수 n1과 n2에게 각각 전달된다.
      • 호출자의 변수 num1과 num2는 실인수, 피호출자의 인수 n1과 n2는 형식인수라 부른다.
      • 이때 짝이 되는 실인수와 형식인수의 자료형은 일치해야 한다.

     

    scanf로 입력받은 37, 43은 main()함수의 num1 = 37 과 num2 = 43 각각 입력받아

     

    float average (int n1, int n2)에는 n1 = 37; n2 = 43; 이 들어가게 된다.

     

    이때 자료형 int은 형동등성에 의해 일치해야한다.

     

    • 피호출함수의 종료와 반환값의 전달

     

    return (avg);

     

    return문은 average()함수의 실행을 종료함과 동시에, 반환값 avg를 호출자인 main()함수에 전달한다.

     

    이때 반환값 avg와 average()함수의 반환자료형은 일치해야한다.

     

    결과

     

     

    main() 함수는 심볼테이블을 가지고 주소도 가지고 있다. 즉 함수는 주소를 가지고 있는 것이다.

     

     

    함수의 원형 (선언)

     

    앞 예제 프로그램에서 main()앞에 다음과 같은 선언문이 있다.

     

    float average (int n1, int n2);

     

    • 함수 선언문은 average() 함수의 원형이라고도 부른다.

     

    Ex) 프로토타입 에서 type int 만 넣고n1 n2는 생략이 가능하다.

     

     

    • average() 함수가 반환값이 없고 인수도 없을경우 두 가지 방법으로 명시할 수 있다.

     

    void average(void);

     

    void average();

     

     

    분할 컴파일

     

    Ex) 위소스를 분할 컴파일 할 때

     

    main 함수 부분을 a.c 로 저장

     

     

    average 정의 부분을 b.c 로 저장

     

     

     

    [ gcc 컴파일 ]

    • gcc -c a.c : a.o 파일생성
    • a.c 와 b.c 를 각각 a.o, b.o obj 파일을 생성해 준다.
    • a.c 와 b.c 를 각각 컴파일 하면 링크 과정에서 에러가난다.
    • 즉 obj 파일은 생성 할수 있다는 것.
    • gcc -o a a.o b.o : a.o 와 b.o 를 합쳐서 a(exe) 파일을 생성한다.

     

    [ cl 컴파일 ]

     

    1. cl -c a.c : a.obj 파일생성
      • a.c 와 b.c 를 각각 a.obj, b.obj 오브젝트 파일을 생성해 준다.
    2. cl a.obj b.obj : 임의의 이름의 실행(exe) 파일 생성.
      • cl /Femain.exe a.obj b.obj : 실행파일을 main.exe로 생성
      • 위의 명령어는 파일 이름을 정할수 있다.

     

     

    Ex) 위 소스를 다른 헤더파일로 정의 하여 분할 컴파일 방법

     

     

    • 위 의 average 정의 부분 b.c 를 b.h 로 저장.
    • main 함수 부분인 a.c 에서 그림과 같이 #include "b.h" 를 넣어준후 컴파일 한다.

     

     

     

    지역변수

    • 위의 예제 소스에서 변수 avrg 는 main()함수에서 변수 avg 는 average() 함수에서 선언 되었다. 이들은 각기 선언된 함수 내에서만 유효하다. 이러한 변수의 통용범위를 변수의 유효범위 라고 부른다.
    • 변수 avg는 average( )함수의 지역변수 이다. 함수의 지역 변수는 함수의 실행이 시작될 때 생성되어 함수의 실행이 끝나면(중괄호) 소멸한다. 이것을 변수의 존재기간 이라 부른다.

     

    Ex) 같은 이름의 지역 변수가 두 함수에서 사용되는 프로그램의 예

     

     

    결과

     

     

     

     

     

     

    728x90
    반응형
상단으로