함수 (function)
선언부, 구현부, 호출부로 나뉜다.
문법
선언부
<return type> <함수명>([<parameter type> <parameter>]);
설명:
- 구현부가 선언부 역할도 하기 때문에 생략할 수도 있다.
- 선언부가 반드시 필요한 경우는 함수 호출부가 구현부 보다 먼저 있을 때이다.
예)
int main() {
hello(); // 컴파일 에러
}
void hello() {
}
선언부를 삽입하여 해결
void hello(); // 선언부 삽입
int main() {
hello(); // 문제 없음
}
void hello() {
}
위 사실을 통해 C 컴파일러가 소스 파일을 위에서 아래로 읽어가면서 처리한다는 특성을 알 수 있다.
예)
- void hello(void);
- int hello(void);
- int hello(char * message);
- void hello(char * message, int size);
구현부
<return type> <function name>([parameter]) {[code]}
설명:
- 함수 내부는 하나의 작은 프로그램 코드들로 이루어져 있다.
- 프로그램은 순차적으로 위에서 아래로 하나씩 작업들이 수행된다.
- 함수의 호출은 시작-실행-끝 단계로 나눠 볼 필요가 있다.
- 시작 : 입력된 파라메터를 정리한다.
- 실행 : 함수 안에 정의된 코드들이 순차적으로 실행된다.
- 끝 : 코드들이 모두 수행되면 함수 안에서 사용한 지역 변수 등의 메모리 공간을 자동으로 해제한다. 리턴값이 있으면 반환한다.
예)
void hello(void) {printf("hello");}int hello(void) {printf("hello");return 0;}int hello(char * message) {printf("Hello %s", message);return 0;}void hello(char * message int size) {printf("Hello %s (%d)\n", message, size);}
호출부
<function name>([parameter]);
설명:
- 함수 이름과 파라메터를 입력하면 된다.
예)
hello();
hello("Bye~");
hello("Bye~", 4);
hello("Bye~", strlen("Bye~"));
리턴값
함수 실행이 끝에 다다르면 값을 리턴한다.
리턴 값은 함수 수행의 결과물이나 함수 수행이 성공인지 실패인지 등을 표시하는데 주로 사용된다.
int add(int a, int b) {
return a+b;
}
int sum = add(10, 11);
printf("%d\n", sum);
void
함수 파라메터로 입력 받을 게 없어가 리턴할 게 없으면 빈 공간으로 두지 않고 void 라고 표시해 준다.
void hello(void);
변수 (variable)
선언부와 참조부로 나뉜다.
문법
선언부
[unsigned] <variable type> [*] <variable name>[= <default value>];
설명:
- unsigned (optional) : 양수만 사용하겠다고 표시
- variable type : 사용할 메모리 크기
- char : 1 바이트 (일반적으로 문자열 표현에 사용됨)
- short : 2 바이트 (일반적으로 숫자 표현에 사용됨)
- int : 4 바이트 (short 과 마찬가지)
- long : 가변, 32bit 머신에서는 4 바이트, 64bit 머신에서는 8 바이트
- float : 4 바이트 (일반적으로 실수 표현에 사용됨)
- double : 8 바이트 (float 와 마찬가지)
- * (optional) : 포인터 (다음에 설명)
- variable name : 컴퓨터는 메모리 공간을 숫자 체계로만 인식하기 때문에 사람이 기억하기 쉽게 이름을 지정할 수 있다.
- = default value (optional) : 변수를 선언하고 바로 값을 입력한다.
참고: 배열 타입은 다음에 설명
예)
int number;
int number = 10;
참조부:
<variable name>
예)
int a = 10;
int b = 10;
int sum = a + b;
a = 20;
sum = a + b;
상수
쓰기 금지 값
선언문:
const 를 지정한다.
예)
실행:
$ ./hello
Hello TJ
C 언어의 문법은 C++ 이나 자바 문법보다 꽤나 제약 사항이 많고 사람들이 신경써서 지켜야 하는 부분이 많다.
C 언어의 장점은 C 컴파일러가 다른 언어 컴파일러들에 비해 단순하다는 점이다.
컴파일러가 단순하다는 의미는 사람보다기계와 더 가깝다는 의미다.
자바나 C++ 언어는 조금 더 사람에 가까워지기 위해 컴파일러에 많은 기능을 집어 넣었다.
예를 들어 C 언어에서는 함수 내부에서 변수 선언이 반드시 함수 시작 부분에서 선언되어야 하지만 C++ 이나 자바는 참조되기 전에만 선언해도 되기 때문에 코드 중간에 위치해도 된다.
컴파일러가 간단하면 더 많은 플랫폼에서 지원하기 수월해 진다는 의미이다.
컴파일러는 플랫폼 제작사에서 먼저 제공 한다.
많은 언어를 제공하는게 플랫폼을 판매하는 입장에서 유리하기 때문에 최대한 많은 언어를 제공하려고 노력하지만 비교적 적용이 쉽다는 이유로 C 컴파일러를 보통 다른 언어들 보다 우선적으로 제공된다.
결국 C 언어로 프로그램을 짜놓으면 새로운플랫폼에 먼저 적용해 볼 수 있는 기회가 많다는 의미가 된다.
선언문:
const 타입 상수명 = 초기값;
const 를 지정한다.
예)
const int max = 10;
max = 20; // 컴파일 에러
printf("max: %d\n", max); // 읽기만 가능
Sample Program
#include <stdio.h>
#include <stdlib.h>
void hello(char * name);
void hello(char * name) {
printf("Hello %s\n", name);
}
int main(int argc, char * args[]) {
hello("TJ");
}
실행:
$ ./hello
Hello TJ
C 언어의 문법
C 언어의 문법은 C++ 이나 자바 문법보다 꽤나 제약 사항이 많고 사람들이 신경써서 지켜야 하는 부분이 많다.
C 언어의 장점은 C 컴파일러가 다른 언어 컴파일러들에 비해 단순하다는 점이다.
컴파일러가 단순하다는 의미는 사람보다기계와 더 가깝다는 의미다.
자바나 C++ 언어는 조금 더 사람에 가까워지기 위해 컴파일러에 많은 기능을 집어 넣었다.
예를 들어 C 언어에서는 함수 내부에서 변수 선언이 반드시 함수 시작 부분에서 선언되어야 하지만 C++ 이나 자바는 참조되기 전에만 선언해도 되기 때문에 코드 중간에 위치해도 된다.
컴파일러가 간단하면 더 많은 플랫폼에서 지원하기 수월해 진다는 의미이다.
컴파일러는 플랫폼 제작사에서 먼저 제공 한다.
많은 언어를 제공하는게 플랫폼을 판매하는 입장에서 유리하기 때문에 최대한 많은 언어를 제공하려고 노력하지만 비교적 적용이 쉽다는 이유로 C 컴파일러를 보통 다른 언어들 보다 우선적으로 제공된다.
결국 C 언어로 프로그램을 짜놓으면 새로운플랫폼에 먼저 적용해 볼 수 있는 기회가 많다는 의미가 된다.
댓글 없음:
댓글 쓰기