오늘 과제를 열심히 하다가 다른 소스에서는 잘 되는데 내가 만든 소스에서는 계속 컴파일 에러가 나는 구문이 있었습니다.

void function( char *path )
{
static char *full = path;
}

어떤 함수에 스태틱 캐릭터 포인터가 있고 함수의 인자로 오는 캐릭터 포인저의 값을 저장하는 구문인데요..

"initializer is not a constant"

위와 같은 에러 메시지가 뜨더군요.. 에러문을 해석하면 스태틱 포인터에 초기화될때 들어가는 값이 상수가 아니라서 안된

다..이런 의미인데 이런 문법적 제약이 있는것은 아닌것으로 알고 있는데다가 다른 소스에서는 컴파일이 잘되니 도무지 알 수
없는 노릇이라 인터넷을 뒤저 보았습니다. 다른 사람들도 저와 같은 현상이 일어나는 것을 알고 있었는데,

static char *full = path;
위의 코드를 아래와 같이 수정하면 되는 것입니다.
static char *full = path;
full = path;
어처구니가 없었습니다.

곰곰히 생각해 본결과, 다른 원인은 모르겠고 컴파일이 잘 되는 소스는 cpp파일이었고, 컴파일에러를 출력하는 소스는 c파일

이었습니다.

이상한 C컴파일러입니다....






혹시 다른 이유를 아시는 분 알려 주세요^^


by danguria 2009. 1. 13. 20:26
  • wow 2011.01.27 18:09 ADDR EDIT/DEL REPLY

    로컬 스택틱 객체는 최초 호출되어지는 순간에 메모리가 초기화가
    되어지죠.

    그후부터는 초기화 되어지던 문장은 실행되지 않아요.

    즉 function이라는 함수 내의 스택틱 변수의 path로의 초기화는

    한번만 이루어지고 그 이후부터는 사용이 되지 않는 스택틱 변수가 되어
    지는거죠. - 쓸대 없이 방치되어지는 메모리 -

    컴파일러마다 다르겠지만 저런 메모리를 오류라고 판단하는거 같습니다 .

| 1 2 3 4 5 6 7 |