"정적 초기화 순서 오류" 수수께끼 공개
악명 높은 "정적 초기화 순서 오류"(SIOF)는 C 프로그램 내의 여러 파일에 종속된 정적 변수가 포함될 때 발생합니다. 초기화를 위해 서로. 다음 예를 고려하십시오.
질문:
-
file1.cpp를 컴파일하는 동안 컴파일러는 다음을 수행합니다.
- 다음에 대한 스토리지 할당 y?
- x를 초기화하시겠습니까?
-
file2.cpp를 컴파일하는 동안 컴파일러는 다음 작업을 수행합니다.
- x에 대한 저장소를 할당합니다. ?
- 초기화 y?
-
file1.o와 file2.o를 연결할 때 file2.o가 먼저 초기화되면 다음을 수행합니다.
- x는 이니셜을 받습니다. 0의 값?
- x 남음 초기화되지 않았습니까?
답변:
C 표준에 따르면(3.6.2 "비로컬 초기화 object"):
-
a. 컴파일러는 y에 저장소를 할당하지 않습니다.
b. 컴파일러는 다음을 할당합니다. x를 저장하지만 초기화하지 않습니다 it.
-
a. 컴파일러는 x에 저장소를 할당하지 않습니다.
b. 컴파일러는 y에 저장소를 할당하지만 할당합니다. 초기화하지 않음 it.
-
a. x는 0의 초기 값을 받습니다.
b. x 하지 않습니다 유지하다 초기화되지 않았습니다.
설명:
-
1단계: x와 y는 다른 초기화 전에 0으로 초기화됩니다.
-
2단계: x 또는 y는 동적으로 초기화됩니다(표준에서는 어느 것을 지정하지 않음). 다른 변수는 0으로 초기화되므로 초기화된 변수는 값 1을 받습니다.
-
3단계: 그런 다음 다른 변수는 동적으로 초기화되어 값 2를 받습니다.
위 내용은 C에서 정적 초기화 순서 오류가 발생하는 동안 무슨 일이 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!