프로그래밍/삽질

#define과 전역변수의 차이

ajdanddl 2019. 7. 18. 01:09
반응형

다익스트라 코드를 작성하던 중 전역변수를 사용하고 그 변수를 전역배열에다가 사용하였다.

대충 예를 들면

 

#include<stdio.h>

  int a=3;

  int array[6]={a,a,3,4,5,2}; //에러 나옴

  int main(){

          .

          .

          .

   }

 

뭐 이런 식으로 했는데

"initializer is not constant in c"에러가 3번째 줄에서 떴다.

이때까지만 해도 전역변수와 #define의 차이를 모르고 썼는데 stackoverflow를 좀 뒤져보니 c에서는 전역변수가 constant하지 않다고 한다. 

 

전역변수로 a를 초기화하는 경우 a++;과 같은 명령어로 a의 값이 바뀔 수 있겠지만 #define을 해주면 a의 값은 처음부터 끝까지 3으로 지속된다.

그래서 이제 코드를 

 

#include<stdio.h>

#define a 3

  int array[6]={a,a,3,4,5,2}; //에러 나옴

  int main(){

          .

          .

          .

   }

 

이렇게 바꾸니까 해결은 되었는데 한 가지 더 의문이 든게 #define으로 a값을 지정해놓고 main함수에서 a의 값을 바꿔주려고 하면 어떻게 될까 궁금해졌다.

 

급한대로 dev c++을ㅎㅎ..

4 3 C:\Users\user\Documents\dijkstra.c [Error] lvalue required as increment operand

다음과 같은 에러가 났다.

#define a는 바꿀 수 없다. (#define의 정확한 용어는 전처리기 지시자, a와 같은 변수의 용어는 매크로 상수이다.)

반응형