범위/함수 안에 넣을 때 다음 코드를 컴파일 할 수 없으면 컴파일러에서 initializer element is not constant
행을 따라 오류가 발생합니다. 이것은 MSVC뿐만 아니라 GCC에서도 발생합니다. 복합 문자로 변수 초기화
static const char *const *const list = (const char *const[]){"abc", "def", "xyz"};
그러나 코드가 정적 저장 기간이 전역 변수로하는 함수의 외부에 넣어되고
list
가 초기화 될 때, 코드는 잘 컴파일 경고 나 오류를 생성하지 않습니다.
list
이 비 정적 인 경우에만 스코프/함수 내에서 초기화 될 수 있습니다.
cppreference docs의 다음 인용문 내 눈을 사로 잡은했습니다
문자 그대로의 화합물이 파일 범위와 자동 스토리지 지속 기간의 경우에 발생하는 경우 화합물 리터럴 평가하여 정적 저장 기간이있는에 익명의 객체 복합 리터럴은 블록 범위에서 발생합니다 (이 경우 객체의 수명은 닫는 블록의 끝에서 끝납니다).
정적 저장소 기간의 로컬 변수를 복합 문자로 초기화 할 수 없다는 것은 안전한가요?