선언문
선언문은 어떤 컴파일러가 참조할 식별자(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
같이 보기