다른 모듈에 정의 된 배열의 셀을 초기화하려는 특정 솔루션을 고려하고 있습니다 (하나의 테이블을 초기화하는 많은 모듈이 있음). main을 실행하기 전에 배열을 읽지 않습니다 (따라서 정적 초기화 순서에는 문제가 없습니다).다른 모듈에 정의 된 변수를 부분적으로 초기화하십시오.
내 접근 방법 : 생성자는 부작용이 있기 때문에
/* secondary module */
extern int i[10]; // the array
const struct Initialize {
Initialize() { i[0] = 12345; }
} init;
/* main module */
#include <stdio.h>
int i[10];
int main()
{
printf("%d\n", i[0]); // check if the value is initialized
}
는 컴파일러가 init
일정을 제거하지 않습니다. 내가 맞습니까? 메커니즘은 괜찮습니까? GCC (-O3)에서는 모든 것이 잘됩니다.
// 편집
현실 세계에는 많은 모듈이 있습니다. 나는 여분의 모듈을 피하기를 원한다. (더 나은 확장 성을 위해서) 모든 부 초기화 루틴을 모을 중심 장소. 따라서 각 모듈이 자체 초기화를 트리거하는 것이 중요합니다.
각 모듈을 초기화하는 동안 i [] 배열이 이미 할당되어 있다고 가정합니다 (초기화되지 않음). –
AFAIK 정적 저장 공간은 응용 프로그램이 시작될 때 한 단계에서 할당되고 0으로 지정됩니다. – adf88
UP : 약 ** 글로벌 ** 정적 저장 공간 – adf88