RadarURL

메뉴 건너뛰기

해결된 질문

#define 이랑 전역변수 차이점을 잘 모르겠네요.

고영훈(13) 2013.05.31 10:53 Given Points 5
추천 수 ( 0 )

차이점을 일단 모르겠구요.


그다음에 또 질문이 있는데


#include<stdio.h>

#define num 5

int five=5;


int main()

{

int a[num];

int a[five];

return 0;

}


이렇게 하면 a[num]은 되는데

a[five]는 안된다고 알고있습니다.

왜그런지 알려주세요.


두개 똑같은거 아닌가요?

언제 사용하나요?

답변등록

질문자 선택 답변 보기

답변 (1)

심석보(02) 2013.05.31 11:35
질문자로부터 선택받은 답변입니다

일단   변수명[상수] 가 배열 선언의 기본형입니다.

'상수' 라고하는 것은 값이 변하지 않는 고정값인 변수 입니다.  

라고 하지만 실제로는 그냥 저 안에는 숫자만 들어간다고 생각하시면 됩니다.  (적어도 C에서는 그럴껍니다. )


그렇다면 왜 num 은 되느냐?


#으로 시작하는 일련의 구문들은 전처리문 이라고 불리는 물건입니다.  (http://www.soen.kr/lecture/ccpp/cpp1/cpp1.htm 의 전처리기 파트 참고)

'전'처리문이라고 불리는 이유는 이녀석 들은 코드가 컴파일 되기 이전에 미리 처리되는 녀석들입니다. 

대표적인 전처리문인 #include 는  컴파일 하기 '전'에 해당 파일을 복붙하는 기능을 가집니다.


그리고 질의 하신 #define num 5 은  코드를 컴파일 하기 전에 코드 전체에 포함된 num 이라는 글자를 5라는 글자로 '찾아 바꾸기' 하는 기능을 가집니다. 

따라서 


int main()

{

int a[num];

int a[five];

return 0;

}


는  컴파일 시점에서 


int main()

{

int a[5];

int a[five];

return 0;

}



로 바뀝니다.  일반적으로 #define 으로 선언된 상수는 대문자로 표시합니다. (일반 적인 경우와 구별하기 위해서)

그리고 위의 예와 같이 단일 숫자일때는 상과없지만  

#define SIZE 100+200

일때는 통상적으로 

#define SIZE (100+200) 라고 쓰도록 권고합니다 이유는


SIZE*10 일떄. 

위의 구문은 100+200*10 이 되어서 .. 몇이지? 고..

아래의 구문은 (100+200)*10 이여서 몇인가요?


이기 때문입니다. 



이게 완전히 정확한 내용인지는 잘 기억이 안나고.. 대강은 그렇습니다. 그럼 #define 은 언제 쓰는냐? 위에도 잠깐 나왓지만.


화면사이즈라거나., 입력받을 스트링의 맥스값. 따위의 상수값을 구현할 때 사용합니다.


C++ 에서는 변수 말고 상수가 실제로 지원이 되기 때문에 좀 다르긴 합니다만. 별도의 상수공간이 배정되어 있느냐. 컴파일시점에서( 이 컴파일은 컴파일 시점 - 실행 시점의 컴파일 시점입니다. )  치환되어 처리되느냐의 차이점이 있긴합니다. 


0 person rated this as good
위로