선언문
선언문은 어떤 컴파일러가 참조할 식별자(identifier)와 이름을 알리는 것을 말한다.[1]
목차
개요
프로그래밍에서 선언문은 프로그램 내 대상에 이름을 부여함으로써 실제 수행할 동작 등을 그 이름과 관련시키는 것으로 변수는 선언을 통해 이름(Name),자료형(Type) 등을 부여받게 하고 함수는 인터페이스 형식 및 자료형 정보 제공 아직 구체적인 몸체가 포함되지 않은 채 일련의 동작을 추상화시켜주는 것으로 컴파일러에 변수 선언은 해당 변수의 사용을 알려서, 메모리 확보를 미리 준비시키는 것으로 값을 지정하는 변수 초기화가 아니므로, 아직 실제 메모리 공간을 할당하는 것은 아니고 알려준다는 뜻이다.[2]
종류
선언문 종류는 여러 가지가 있지만, 대표적으로 변수, 함수, 배열 선언이 있고 변수선언 하기 전에 지켜야 할 규칙은 다음과 같다.
규칙
- 첫 문자는 반드시 영문자 또는 밑줄 문자(_)로 시작한다.
- 식별자는 대문자와 소문자를 구분한다.
- 예약어는 사용할 수 없다.
- 식별자는 중간에 공백이 있어서는 안 된다.
- 식별자의 길이는 제한이 없다.[3]
변수
변수 선언문은 변수라는 기억공간에 이름을 선언하는 선언문으로 형식은 다음과 같다. '자료형 변수이름;' 으로 선언문을 작성한다. 참고로 자료형은 데이터 타입이며 종류 : 정수, 문자, 부동소수점(실수), 문자열이다.[3]
자료형
대표 문자형 : char ,unsigned char(unsigned : 부호없음)
char name='a';
대표 정수형 : (unsigned)short, (unsigned)int, (unsigned)long
short a; int b=10; long c=20;
대표 실수형 : float, double
float a=1.244; double b=10.0;[3]
지역
지역변수(Local Variable)는 중괄호 내부, 함수의 매개변수(Parameter)에서 사용되는 변수를 의미한다. 중괄호 밖, 함수의 밖에선 그 효력을 발휘할 수 없다. 지역변수에서 지역은 중괄호 내부, 함수의 내부를 의미하며 선언하는 예시는 다음과 같다.
#include <stdio.h> void print(){
int a = 30, b = 40; printf("%d %d", a,b);
} int main(){
int a = 10, b = 20; printf("%d %d \n", a,b); print();
return 0; } 10 20 30 40[4]
전역
전역변수(global variable)는 지역변수와 반대로, 중괄호 외부에 선언되는 변수다. 전역이라는 이름 그대로 어느 지역에서든 참조해서 사용할 수 있으며 선언하는 예시는 다음과 같다.
#include <stdio.h> int global = 100;
int main(){ printf("%d", global); return 0; }[4]
정적
정적변수는 단어에서도 유추가 가능하듯 동적 변수의 반대로 동적 변수는 지금까지 C언어에서 다룬 대부분의 변수며 선언 방식은 다음과 같다.
static int n;[4]
외부
외부 변수(Extern) 변수는 이름 그대로 외부 파일에 선언된 변수를 참조하여 사용하는 변수이며 선언 방식은 다음과 같다.
//1.c #include <stdio.h> int global = 0; int main(){ return 0; } //2.c #include <stdio.h> extern int global; //파일 1.cpp int main(){ printf("%d", global); return 0; }[4]
함수
함수 선언을 하는 이유는 컴파일러(compiler)에 그 함수를 미리 인식하게 하려고 이기 때문이며 함수 원형(prototype)에 세미 콜론을 붙여서 선언한다.
int add ( int a , int b) ;
매개 변수의 이름를 생략하여 함수 선언하는 것도 가능하다.
int add ( int , int) ; //int 타입의 매개 변수 2개를 필요로 하다.
main 함수의 위쪽에 선언을 한다.
int add ( int a , int b) ; // add 함수 선언
int main (void) // main 함수 { ...... }[5]
이유
- 함수를 미리 선언하면 함수를 호출한 곳에서 올바른 형식으로 호출하였는지 쉽게 파악 할 수 있다. 함수 선언에는 매개 변수의 타입과 매개 변수의 개수를 알 수 있는 힌트가 있기 때문이다.
- 함수를 선언한 곳에서 함수 반환 값의 형태를 미리 파악하고 있다가 어디에서 그 함수를 호출한 경우에 메모리에 반환 값과 같은 형태의 저장 공간을 확보하며 반환 형태가 int이면 int 타입 메모리 공간을, double이면 double 타입의 메모리 공간을 호출한 곳에 준비한다.
- 예시
#include <stdio.h> int add(int x, int y); // add 함수를 선언한다. int main(void) // main 함수가 시작한다. { int a = 10, b = 20; int result; result = add(a, b); // add 함수를 호출 한다. printf("result : %d\n", res); return 0; } // main 함수의 끝이다.
int add(int x, int y) // add 함수 정의가 시작된다. { int temp; // 두 정수의 덧셈을 임시로 저장할 변수다. temp = x + y; return temp; } // add 함수의 종료 지점이다.[5]
배열
배열도 사용되기 전에 선언되어야 하며 일반적인 형식은 다음과 같다.
원소 타입 배열 이름 [크기]];
- 원소 타입 : 배열에 포함된 원소들의 타입
- 배열 이름 : 배열로써 선언되는 변수의 이름
- 크기 : 배열에 속한 원소들의 개수
int a[10];
위에 있는 식으로 선언한다. 다음에 나오는 선언문도 마찬가지다.
float score[5];
의미 : 배열 이름이 score이고, 원소의 타입은 float이고, 원소의 개수는 5인 배열을 선언한다.
char codes[10];
의미 : 배열 이름이 codes이고, 원소의 타입은 char이고, 원소의 개수가 10인 배열을 선언한다.
int amount[100];
의미 : 배열 이름이 amount이고, 원소의 타입은 int이고, 원소의 개수가 100이 배열을 선언한다.[5]
각주
- ↑ banaba, 〈선언과 정의(declaration and definition)〉, 《티스토리》, 2018-10-22
- ↑ 〈Declaration, Variable Declaration, Variable Definition, Variable Initialization 선언, 변수 선언, 변수 정의, 변수 초기화〉, 《정보통신기술용어해설》
- ↑ 3.0 3.1 3.2 컴강사 eduview, 〈c언어 변수 선언과 자료형의 종류〉, 《티스토리》, 2019-09-27
- ↑ 4.0 4.1 4.2 4.3 KRFile, 〈(C언어 강좌) #11 정적변수, 지역변수, 전역변수, 외부변수, 레지스터 변수〉, 《티스토리》, 2020-01-28
- ↑ 5.0 5.1 5.2 cjh, 〈함수 선언〉, 《해피라이프》, 2020-04-30
참고자료
- 〈Declaration, Variable Declaration, Variable Definition, Variable Initialization 선언, 변수 선언, 변수 정의, 변수 초기화〉, 《정보통신기술용어해설》
- 컴강사 eduview, 〈c언어 변수 선언과 자료형의 종류〉, 《티스토리》, 2019-09-27
- KRFile, 〈(C언어 강좌) #11 정적변수, 지역변수, 전역변수, 외부변수, 레지스터 변수〉, 《티스토리》, 2020-01-28
- cjh, 〈함수 선언〉, 《해피라이프》, 2020-04-30
같이 보기