프로그래밍/C2013. 11. 24. 00:11

자 아래를 보자

void DLL_PrintNodes(Node* head){

 Node* current;
 current = head;
 int idx = 0;

 while(current->NextNode != NULL) {
  printf("[%d] %d\n", idx++, current->Data);
  current = current->NextNode;
 }
}

 

문제가 보이는가? 실행하면...

 error C2143: 구문 오류 : ';'이(가) '형식' 앞에 없습니다.
 error C2065: 'idx' : 선언되지 않은 식별자입니다.

 

응???

linux에서 gcc 툴체인으로 작업하는 사람들은 위와 같은 반응을 보일텐데...

 

MSDN에서는 다음과 같이 말하고 있다.  C에서는 함수나 블록의 시작점에 지역변수들은 선언되야 하며, 함수가 선언이 아닌 명령어들을 실행하고 나서는 선언이 들어 올 수 없다고...

 

예) 

// C2143j.c
int main() 
{
    int i = 0;
    i++;
    int j = 0; // C2143 에러
}

 

그럼 왜 GCC에서는 괜찮은가? 그건 GCC가 위와 같은 코드를 GNU확장으로 허용하기 때문이다.  만약 ANSI나 C89등에 맞추어서 컴파일 되길 원한다면, -pedantic을 flag로 넘겨주면 된다.

'프로그래밍 > C' 카테고리의 다른 글

함수포인터 & typdef를 이용한 함수포인터  (0) 2014.05.07
ternary operator  (0) 2014.04.13
c precedence table  (0) 2013.11.23
typedef struct 안에서 스스로를 참조 할 때 주의점  (0) 2013.11.19
symbol visibility  (0) 2013.08.07
Posted by code cat