2011-09-30 4 views
5

하는 I는 사용자의 Use of 'extern' keyword while defining the variable차이점 extern int a; extern int a = 42;

하나의 답변을 읽는 동안은 내가 모두 정의하지만, 선언하지 기다리고 있었다 이러한 방법

extern int a;  // not a definition 
extern int a = 42; // definition 

대답했다. 나는 양쪽 진술이 그 변수가 함수 밖에서 정의되었다고 말하고 그것을 사용하기 위해서는 extern 키워드를 사용해야한다고 생각했다. 이것이 실수입니까? 아니면 정말로 정의입니까? 내가

extern int a; // variable is already defined but its outside the function 
extern int a=42 ; //I guess a variable is assigned a value but not a definition 

그러나이 문이

extern int a = 42; // user said its a definition and now i got confused 

이 저를 취소하십시오 것을 알고있다.

+0

선언 외부 정의한 main() 함수 내에 선언 된 값을 할당 링크 된 질문에서 논의되는 모든 것은 파일 범위가 지정된 선언으로 간주되며 함수 범위가 아닙니다. –

답변

7

초기화가 시도 될 때마다 extern과 상관없이 정의이됩니다. 이 경우 extern 키워드는 중복되어 있으므로 기본적으로 static으로 표시된 기호에는 외부 연결이 설정되어 있기 때문에 중복됩니다.

이 외부 변수를 선언하고 현재 컴파일 단위에서 초기 값을 설정하는 것은 의미가 없습니다. 이는 모순입니다.

+0

와우! 나는 c가 정말로 그것에 묶여있는 기적을 가진 언어라는 것을 몰랐다. – niko

+0

그래서 extern int a = 42를 의미한다; int = 42 일뿐입니다. 오른쪽 – niko

+0

오케이 당신이 내 컴파일러에서 그것을 시도하고 내 문제는 내가 그 문제가 있다면 대답을보고 나서 내 마음에 몇 가지 생각을 가지고있다. 하지만 고마워! – niko

5

extern int a;은 선언입니다. 저장 공간을 할당하지 않습니다.

extern int a = 42;은 정의입니다. 그것은 INT 값 (A)를 저장하는 공간을 할당하고, 그것을 42

0

여기서 변수의 정의는 글로벌 선언 부

extern int a; //This is a declaration 

extern int a=42; //This is a definition 
+2

극단! 네!!! – UmNyobe

관련 문제