C 언어로 전역 변수가 항상 초기화됩니까?

1854 단어 C
전역 변수 1의 x가 다음과 같이 정의되었을 때 0으로 초기화됩니까?
int x;

int main(void)
{
    /* 略 */
}

표준에 따르면 "0으로 초기화된다"



「JIS X 3010:2003 프로그램 언어 C(2003).」의 p.95에 이하의 기재가 있습니다.



"b) 그 오브젝트의 형태가 산술형의 경우, (양 또는 부호 없음의) 0 에 초기화한다."라고 합니다. 이에 따라 전역 변수 x는 초기 값 0을 갖습니다. 실제로 많은 범용 계산기에서는 프로그램을 실행할 때마다 다시 로드되므로 전역 변수 x는 초기 값 0을 갖게 됩니다.

임베디드 시스템에서



임베디드 시스템에서는 전역 변수의 초기화에 주의가 필요합니다. 일반적으로 전역 변수가 할당된 메모리는 프로그램이 로드될 때 초기화됩니다 2 프로그램이 로드되지 않으면 전역 변수는 반드시 "의도한"초기값을 갖지 않습니다. [1, 9.3.5 절, pp.255-256]에 따르면, 많은 임베디드 시스템은 각 실행마다 프로그램을 다시로드하지 않습니다.

But in many embedded systems, the program is not necessarily reloaded for each run.

따라서 전역 변수 x는 반드시 초기 값 0을 갖는 것으로 가정할 수는 없습니다.

그럼 어떻게 하는 것이 좋은 실천인가요? main 함수가 있다면, main 함수의 본문에서 선언의 직후에 전역 변수의 초기 값을 할당하는 문장을 작성하는 것이 더 안전합니다.
int x;

int main(void)
{
    x = 0;
    /* 略 */
}

참고문헌



[1] Edward A. Lee and Sanjit A. Seshia, Introduction to Embedded Systems, A Cyber-Physical Systems Approach, Second Edition, MIT Press, ISBN 978-0-262-53381-2, 2017. htps : // p와 ぇ my. 베르케 y. 에즈 / 보오 ks / 에세 시아 /



외부 변수

일반적으로 bss 섹션에 할당되는 메모리는 이러한 초기화가 이루어집니다.

좋은 웹페이지 즐겨찾기