■ 함수
인자 / 인수 리스트
- 빨간 부분을 인자/인수 리스트라고 함.
- 파란 글씨 각각을 인수 또는 인자라 함.
ex ) float average( int n1, int 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_
*/
'C++프로그래밍' 카테고리의 다른 글
2013.04.01_함수포인터응용편! (0) | 2013.04.01 |
---|---|
20130329_함수포인터(1) (0) | 2013.03.29 |
2013.03.28_함수의인수전달기법 (0) | 2013.03.28 |
2013.03.28_지역변수갯수맞추자! (0) | 2013.03.28 |
20130327_헤더파일응용편! (0) | 2013.03.27 |