12
다음 코드는 유효합니까?함수 호출 결과로 전역 변수를 초기화 할 수 있습니까?
int add(int a, int b)
{
return a + b;
}
int myvar = add(1, 2);
int main() { /* ... */ }
왜, 또는 없습니까?
다음 코드는 유효합니까?함수 호출 결과로 전역 변수를 초기화 할 수 있습니까?
int add(int a, int b)
{
return a + b;
}
int myvar = add(1, 2);
int main() { /* ... */ }
왜, 또는 없습니까?
정적 초기화는 그들이 범위에있는 한, 함수를 호출 할 수 있습니다.
[dcl.decl]
(2003 문구, 8/2) :
초기 값도 선언자에서 지정 될 수 있습니다; 이니셜 라이저는 8.5 및 12.6에서 논의 된 입니다.
[dcl.init]
(2003 표현 8.5/2)
자동 등록, 정적 및 가 리터럴과 관련된 임의 식에 의해 초기화 될 수있는 공간 범위의 외부 변수 은 이전에 변수로 선언되었고 함수는입니다.
(의미의 모든 종류가있는 static
키워드의 부족에 의해 현혹하지 마십시오. 여러분의 myvar
변수가 네임 스페이스 범위에서 선언, 따라서 정적 저장 기간을 가지고 있습니다.)
하는 경우 주문을 할 때주의해야합니다. 정적 이니셜 라이저가 다른 번역 단위에있을 때 실행되는 순서를 보장 할 수 없습니다. 이니셜 라이저가 다른 전역 변수를 사용하지 않는다면 물론 문제는 없습니다. – bdonlan
@bdonlan : 맞아. –