검수요청.png검수요청.png

선언문

위키원
이동: 둘러보기, 검색

선언문(宣言文, declarative-statement)은 어떤 컴파일러가 참조할 식별자(identifier)와 이름을 알리는 것을 말한다.[1]

개요

선언문은 프로그램의 일반적인 특성과 그 프로그램을 다루는 데이터의 특성을 지정하는 비실행문이다.[2] 프로그래밍에서 선언문은 프로그램 내 대상에 이름을 부여함으로써 실제 수행할 동작 등을 그 이름과 관련시킨다. 변수는 선언을 통해 이름, 자료형(Type) 등을 부여받고, 함수는 인터페이스 형식 및 자료형 정보 제공 아직 구체적인 몸체가 포함되지 않은 채 일련의 동작을 추상화시킨다. 컴파일러에서 변수 선언은 해당 변수의 사용을 알려서, 메모리 확보를 미리 준비시키는 것이다. 이는 값을 지정하는 변수 초기화가 아니므로 아직 실제 메모리 공간을 할당하는 것은 아니고 알려준다는 뜻이다.[3]

종류

변수

변수 선언문은 변수라는 기억 공간에 이름을 선언하는 선언문이다. 선언하는 형식은 '자료형 변수이름;'으로 선언문을 작성한다. 참고로 자료형은 데이터 타입이며 종류는 정수, 문자, 부동소수점(실수), 문자열이다.[4]

규칙
  • 첫 문자는 반드시 영문자 또는 밑줄 문자(_)로 시작한다.
  • 식별자는 대문자와 소문자를 구분한다.
  • 예약어는 사용할 수 없다.
  • 식별자는 중간에 공백이 있어서는 안 된다.
  • 식별자의 길이는 제한이 없다.[4]
자료형

대표 문자형은 char, unsigned char가 있다.

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;[4]
지역변수

지역변수(Local variable)는 중괄호 내부, 함수매개변수(Parameter)에서 사용되는 변수를 의미한다. 중괄호 밖, 함수의 밖에선 그 효력을 발휘할 수 없다. 지역변수에서 지역은 중괄호 내부, 함수의 내부를 의미하며 선언하는 예시는 다음과 같다.[5]

#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
전역변수

전역변수(global variable)는 지역변수와 반대로, 중괄호 외부에 선언되는 변수다. 전역이라는 이름 그대로 어느 지역에서든 참조해서 사용할 수 있으며 선언하는 예시는 다음과 같다.

#include <stdio.h>
int global = 100;
int main(){
		printf("%d", global);
		return 0;
	}[5]
정적변수

정적변수는 단어에서도 유추가 가능하듯 동적변수의 반대로 정적으로 할당되는 변수이다. 동적변수는 C언어에서 다루는 대부분의 변수며 선언 방식은 다음과 같다.

static int n;[5]
외부변수

외부변수(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;
}[5]

함수

함수 선언을 하는 이유는 컴파일러(compiler)에 그 함수를 미리 인식하게 하기 위함이며, 함수 원형(prototype)에 세미콜론을 붙여서 선언한다.

int add ( int a , int b) ;

매개변수의 이름를 생략하여 함수 선언하는 것도 가능하다.

int add ( int , int) ; //int 타입의 매개 변수 2개를 필요로 하다.

메인 함수의 위쪽에 선언을 한다.

int add ( int a , int b) ; // add 함수 선언 
int main (void) // main 함수
{
 ......
}[6]

함수를 미리 선언하면 함수를 호출한 곳에서 올바른 형식으로 호출하였는지 쉽게 파악할 수 있다. 함수 선언에는 매개 변수의 타입과 매개 변수의 개수를 알 수 있는 힌트가 있기 때문이다. 또한 함수를 선언한 곳에서 함수 반환 값의 형태를 미리 파악하고 있다가 어디에서 그 함수를 호출한 경우에 메모리에 반환 값과 같은 형태의 저장 공간을 확보하며, 반환 형태가 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 함수의 종료 지점이다.[6]

배열

배열도 사용되기 전에 선언되어야 하며, 일반적인 형식은 다음과 같다.

원소 타입 배열 이름 [크기]</nowiki>;
  • 원소 타입 : 배열에 포함된 원소들의 타입
  • 배열 이름 : 배열로써 선언되는 변수의 이름
  • 크기 : 배열에 속한 원소들의 개수
int a[10];

위에 있는 식으로 선언한다. 다음에 나오는 선언문도 마찬가지다.

float score[5]; // 배열 이름이 score이고, 원소의 타입은 float이고, 원소의 개수는 5인 배열을 선언한다.
char codes[10]; // 배열 이름이 codes이고, 원소의 타입은 char이고, 원소의 개수가 10인 배열을 선언한다.
int amount[100]; // 배열 이름이 amount이고, 원소의 타입은 int이고, 원소의 개수가 100이 배열을 선언한다.[6]

각주

  1. banaba, 〈선언과 정의(declaration and definition)〉, 《티스토리》, 2018-10-22
  2. 선언문〉, 《네이버 지식백과》
  3. Declaration, Variable Declaration, Variable Definition, Variable Initialization 선언, 변수 선언, 변수 정의, 변수 초기화〉, 《정보통신기술용어해설》
  4. 4.0 4.1 4.2 컴강사 eduview, 〈c언어 변수 선언과 자료형의 종류〉, 《티스토리》, 2019-09-27
  5. 5.0 5.1 5.2 5.3 KRFile, 〈(C언어 강좌) #11 정적변수, 지역변수, 전역변수, 외부변수, 레지스터 변수〉, 《티스토리》, 2020-01-28
  6. 6.0 6.1 6.2 cjh, 〈함수 선언〉, 《해피라이프》, 2020-04-30

참고자료

같이 보기


  검수요청.png검수요청.png 이 선언문 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.