C++프로그래밍

[스크랩]인수/인자리스트

성엽이 2013. 3. 29. 09:29

■ 함수

    

자 / 인수 리스트

빨간 부분을 인자/인수 리스트라고 함.

파란 글씨 각각을 인수 또는 인자라 함.

ex ) float averageint n1int n2 )

 

※ char A;

    int n1;

    n1 = A; //둘다 정수형이라 에러 안뜸(묵시적 형변환)      

 

※ 메인함수에 return 이 빠져있으면 컴파일러가 넣어줌

    하지만 우린 return 0 를 직접 넣어주는것을 표준으로 함.

 

※  반환형이 void 형이면 return; 를 적어줌, 안적어도 컴파일러가 적어줌(하지만 적는 습관을 가져야함)

※ 리턴값은 임시값으로 CPU(레지스터)에 들어가 있음.

 

 

함수의 호출과 실행 / 함수의 정의

- 함수이름은 변수이름과 같은 조건으로 만들수 있음(대소문자 구분, 첫글자는 _ 또는 알파벳으로만

                                                                        숫자, 알파벳, _만을 혼용하여 쓸수있음)

- 함수 이름은  그 함수의 주소

- 함수 이름, 주소, 자료형은 심볼테이블에 올라감

- 함수의 자료형이 명시되지 않으면 int형으로 간주

- 선언된 함수의 인수는 형식인수라 하고 형식인수는 이 함수가 호출 될때 호출자의 실인수값을 전달받는다
  실인수의 자료형이 형식인수의 자료형과 일치하지 않을 경우 컴파일러는 경고 메시지를 출력하지만
  프로그램의 실행은 가능하다. 보통 이 경우 결과값은 틀리게 산출된다  그러므로 프로그램 작성시

  인수의 자료형의 일치에 유의해야한다.

-  재귀함수는 자기자신을 호출함, 재귀함수는 메모리를 많이 잡아먹고 느리기 때문에 반복문으로 대체하는게 좋음. 

- 지역변수 : 변수가 선언된 중괄호 지역 안에서만 영향력과 생명력 있음.

 

※ 함수의 인수 전달기법

 

값 전달 호출(call - by - value)

주소전달 호출(call - by - address)

참조전달 호출(call - by - reference)

 

 

 

 

※ Entry point : _main               <=  컴파일러가 메인함수를 첫번째로 자동 call되는  함수로 만든다.

                                                  그래서 메인함수가 없으면 실행파일이 만들어 지지 않는다.

 

※ cl 컴파일러는 C와 C++ 모두 컴파일 할수 있음.

    리눅스에서 gcc는 C, g++는 C++을 컴파일 함.

 

 

 cl 컴파일 명렁어

설명 

 cl /P main.c

 main.i 전처리파일을 남김

cl /FA main.c

main.asm 파일을 남김

 cl /Wall main.c

모든 warning을 다 띄워줌

cl *.c

폴더 내에 C소스파일을 모두 컴파일 해줌 

 cl /c main.c

main.obj 파일까지만 만듬 (build에서 컴파일만 했다고함) 

 cl ㅁ.obj ㅁ.obj

분할 컴파일(obj 파일을 각각 만들어 합치는것) 

 

※call : 호

 

※  아래와 같이 obj 파일들 즉, 함수들의 집합을 library(라이브러리)라 함, C에서는 C library라 함.

 printf.obj

scanf.obj

   .

   .

   .

 

 

※proto type (원형) :  - 함수 proto type의 예를 들어보자면 ex) int printf(인수리스트); 임.

                              - 헤더파일에 함수의 proto type이 적혀있고, 몸체는 ㅁ.c 파일 또는 library(ㅁ.obj)에 있음

                              - 없는 함수를 호출하면 컴파일 단계에서 obj파일까지 만들고 링크 할수없어서 에러난다

   하지만 proto type이 적혀 있으면 컴파일 2단계에서 바로 에러남 (obj파일 안만들어짐)

   (문법체크에 용이)

-  전처리에서 에러나면 ㅁ.i파일을 만들다가 중단함.

                                    - 함수 선언할때 인자리스트에서 자료형과 자료형 갯수가 중요하지 변수이름은 생략 가능

                                       또는 아무런 이름을 해도  상관없음, 하지만 함수 몸체(body)에서는 변수이름이 사용되기

                                       때문에 정상적으로  작성 되어야 함.

 

 

      ※ 링크 : 함수끼리 연결 시켜줌

 

※ #include <stdio.h>     ←  <   >는 환경변수에 정의된 include 안에 표준라이브러리에서 헤더파일 불러옴,

    #include  "smart.h"     ←  "    "는 현재 파일이 있는 폴더에서 헤더파일 불러옴

    #include  "d:\c언어\smart.h" ←" " 절대경로를 적어서 불러옴

 

헤더파일

/*

#ifndef _SMART_H_                            // #if는  전처리if문이라하고  #endif가 나올때까지 영향을 미침. 
                                                       //ndef(not define) 
                                                       //그러므로 #ifndef _SMART_H_   는 _SMART_H_가  
                                                       //정의되어 있지 않다면
#define _SMART_H_                           //define 하겠다 _SMART_H_를 #endif가 나올때까지의 내용으로...

                                                       // AA 함수의 proto type이 define되고 #endif하여 전처리if문 종료 

void AA(float fnum);

 

#endif  //_SMART_H_

 

      */