전역 변수에 대한 내용은 C
입니다. extern
키워드에 대해 두 가지 질문이 있습니다. 왜 초기화 변수에 필요한C에서 extern 키워드의 동작
- 세계적으로
extern
키워드 을 선언인가? - 전체적으로 선언 된 변수에 대해 초기화가 필요하지 않은 이유는
extern
키워드가 없습니까?
차이점을 설명하십시오.
전역 변수에 대한 내용은 C
입니다. extern
키워드에 대해 두 가지 질문이 있습니다. 왜 초기화 변수에 필요한C에서 extern 키워드의 동작
extern
키워드 을 선언인가?extern
키워드가 없습니까?차이점을 설명하십시오.
이 extern 키워드로 전역 적으로 선언 된 변수에 초기화가 필요한 이유는 무엇입니까?
우리가 초기화되지 않은 변수 컴파일러 통근 키워드를 사용
는 변수가 프로그램에 다른 곳에서 초기화 생각합니다.#include <stdio.h>
extern int i; //extern variable
int main()
{
printf("%d",i);
return 0;
}
출력 :
undefined reference to `i'
때문에, 메모리는 이러한 변수에 할당되지 않은 예를 들어. 따라서 두 번째 경우 컴파일러에서 오류를 알 수없는 기호 i를 표시합니다. 그래서 은 extern 변수에 메모리를 할당하기 때문에 변수을 초기화하는 데 필요합니다. 마찬가지로,
extern int i;
int i = 10;
왜 초기화는 통근 키워드없이 전 세계적으로 를 선언 된 변수가 필요하지 않습니다?
extern 키워드를 사용하지 않으면 컴파일러는 기본값으로 초기화합니다.
#include <stdio.h>
int i; //By default it is extern variable
int main()
{
printf("%d",i);
return 0;
}
출력 : 예를 들어
0
때문에, 컴파일러는 자동으로 변수를 외부 입력을 기본 값으로 초기화합니다.
extern
으로 전역 적으로 선언 된 변수에 초기화가 필요한 이유는 무엇입니까?
// declarations
extern int foo1;
extern int foo2;
초기화 필요하지 않습니다. 명시 적 초기화가없는 전역 변수는 아래와 같이 초기화됩니다.
변수가이라고 선언하면 은으로 정의됩니다. 일부 단위에서 변수를 사용하는 경우 을으로 정의해야합니다.
extern
없이 전역 적으로 선언 된 변수에는 초기화가 필요하지 않은 이유는 무엇입니까? 명시 적으로 초기화 부족한
// declaration and definition - no initialization
int foo3; // Same functional effect as int foo3 = 0;
// declaration and definition - with initialization
int foo4 = 5;
전역 변수는 다음과 같이 초기화됩니다. 다음
C11dr 6.7.9 초기화 ... 정적 또는 스레드 저장 기간을 가진 개체를 명시 적으로 초기화되지 않은 경우 :
- 그것은 포인터 타입이있는 경우, 그것은 초기화 널 포인터에;
- 산술 형식 인 경우 (양수 또는 부호가없는) 0으로 초기화됩니다.
- 집계 인 경우 모든 규칙은이 규칙에 따라 (재귀 적으로) 초기화되고 패딩은 0 비트로 초기화됩니다.
- 공용어 인 경우 첫 번째 명명 된 멤버는 이러한 규칙에 따라 (재귀 적으로) 초기화되고 모든 패딩은 0 비트로 초기화됩니다.
@ M.M 초기화 세부 사항이 추가되었습니다. – chux
정의가 확실합니까? 'extern SomeType some_variable; '은 변수를 선언하기 위해 헤더 파일에서 초기화없이 사용되며'SomeType some_variable = {...};'은 하나의 소스 파일에서 변수를 정의하고 초기화하는 데 사용됩니다. 그건 네가 주장하는 것과는 정반대 인 것 같다. [C에서 소스 파일간에 변수를 공유하려면 어떻게'extern '을 사용합니까?] (http://stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source)를 참조하십시오. -files-in-c /)를 사용합니다. 두 개의 이전 중지 지점 중 하나에서 읽기를 중지하십시오 (표시됩니다). –
extern 변수에는 초기화가 필요 없습니다. extern 변수는이 파일에 명시 적으로 정의되지 않고 대신이 객체와 링크 될 다른 객체 파일에 정의 된 변수에 대한 참조입니다. –