2

선언시 전역 변수에 값을 할당하는 것과 관련하여 충돌하는 정보를 읽었습니다. 선언시 값 초기화 전역 변수

일부

이 허용하는 것 :

int g_int = 5; 

다른 사람들이 메인에 initalized해야 말할 때 :

int g_int; 
int main() { 
    g_int = 5; 
} 

나는 개인적으로 아무 문제없이 비주얼 스튜디오 2,008에서 2,013 사이에서 첫 번째 스타일을 사용했다 .

  • 이것은 합법적입니까? C++입니까?
  • C++에서 정의되지 않은 경우에도 MSVC 및 g ++에서 여전히 컴파일러 정의 동작입니까?
  • 합법적 인 경우 함수 호출이 main 이전에 실행되도록 보장 된 함수 결과의 할당도 유효합니까? 예 : time_t g_starttime = time();?
+0

'g_int = 5; '메인에서 초기화가 아닙니다. 그것은 과제입니다. – NathanOliver

답변

1

다른 사람은 잘못이 주요

"기타"에 초기화해야합니다 말 main에 할당하십시오.

이것은 C++에서 매우 합법적입니다. 함수 결과의 할당도 합법적이며 초기화는 main을 입력하기 전에 이루어 지도록 보장됩니다.

또한 동일한 번역 단위 (즉, 동일한 CPP 파일 내부)의 초기화와 함께 여러 개의 선언이있는 경우 텍스트 순서로 실행된다는 보장이 있습니다.이

int twoTimes(int i) { 
    cout << "Doubling " << i << endl; 
    return 2*i; 
} 
int a = twoTimes(7); 
int b = twoTimes(8); 
int main() { 
    ... 
} 

을 할 경우 출력이 보장됩니다

Doubling 7 
Doubling 8 
1

우선 int g_int = 5; (및 int g_int;)은 선언되지 않았습니다.

이 합법적 인 C++입니까?

예, g_int은 값이 5으로 초기화됩니다. (BTW :. int g_int;g_int0으로 초기화됩니다)

를 합법적 인 경우, 함수 결과의 할당은 주 전에 실행되도록 보장 함수 호출로, 또한 법적인가? 예 : time_t g_starttime = time();

예.

BTW : g_int = 5;main()은 초기화가 아니며 단지 할당입니다. 즉 main()이 입력되기 전에 g_int이 사용되면 기본값은 0 (5이 아님)이 사용됩니다. 하지 변수는 확실히 main에 할당 할 수있는 번역 단위 내에 정의하지만, 그들이 :