>백엔드 개발 >C++ >C에서 정적 초기화 순서 오류가 발생하는 동안 무슨 일이 발생합니까?

C에서 정적 초기화 순서 오류가 발생하는 동안 무슨 일이 발생합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-11 02:05:09326검색

What Happens During Static Initialization Order Fiasco in C  ?

"정적 초기화 순서 오류" 수수께끼 공개

악명 높은 "정적 초기화 순서 오류"(SIOF)는 C 프로그램 내의 여러 파일에 종속된 정적 변수가 포함될 때 발생합니다. 초기화를 위해 서로. 다음 예를 고려하십시오.

질문:

  1. file1.cpp를 컴파일하는 동안 컴파일러는 다음을 수행합니다.

    • 다음에 대한 스토리지 할당 y?
    • x를 초기화하시겠습니까?
  2. file2.cpp를 컴파일하는 동안 컴파일러는 다음 작업을 수행합니다.

    • x에 대한 저장소를 할당합니다. ?
    • 초기화 y?
  3. file1.o와 file2.o를 연결할 때 file2.o가 먼저 초기화되면 다음을 수행합니다.

    • x는 이니셜을 받습니다. 0의 값?
    • x 남음 초기화되지 않았습니까?

답변:

C 표준에 따르면(3.6.2 "비로컬 초기화 object"):

  1. a. 컴파일러는 y에 저장소를 할당하지 않습니다.
    b. 컴파일러는 다음을 할당합니다. x를 저장하지만 초기화하지 않습니다 it.
  2. a. 컴파일러는 x에 저장소를 할당하지 않습니다.
    b. 컴파일러는 y에 저장소를 할당하지만 할당합니다. 초기화하지 않음 it.
  3. a. x는 0의 초기 값을 받습니다.
    b. x 하지 않습니다 유지하다 초기화되지 않았습니다.

설명:

  • 1단계: x와 y는 다른 초기화 전에 0으로 초기화됩니다.
  • 2단계: x 또는 y는 동적으로 초기화됩니다(표준에서는 어느 것을 지정하지 않음). 다른 변수는 0으로 초기화되므로 초기화된 변수는 값 1을 받습니다.
  • 3단계: 그런 다음 다른 변수는 동적으로 초기화되어 값 2를 받습니다.

위 내용은 C에서 정적 초기화 순서 오류가 발생하는 동안 무슨 일이 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.