오늘 과제를 열심히 하다가 다른 소스에서는 잘 되는데 내가 만든 소스에서는 계속 컴파일 에러가 나는 구문이 있었습니다.
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컴파일러입니다....
혹시 다른 이유를 아시는 분 알려 주세요^^
댓글
로컬 스택틱 객체는 최초 호출되어지는 순간에 메모리가 초기화가
되어지죠.
그후부터는 초기화 되어지던 문장은 실행되지 않아요.
즉 function이라는 함수 내의 스택틱 변수의 path로의 초기화는
한번만 이루어지고 그 이후부터는 사용이 되지 않는 스택틱 변수가 되어
지는거죠. - 쓸대 없이 방치되어지는 메모리 -
컴파일러마다 다르겠지만 저런 메모리를 오류라고 판단하는거 같습니다 .