의견.png

선언문

해시넷
dudrb0106 (토론 | 기여)님의 2021년 8월 23일 (월) 13:49 판 (지역)
이동: 둘러보기, 검색

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

각주

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

참고자료

같이 보기


  의견.png 이 선언문 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.