2012-11-14 3 views
2

가능한 중복 연결하지 않습니다
Why does const imply internal linkage in C++, when it doesn’t in C?통근 const를 배열

나는 다음과 같은 경우 :

a.cpp :

const int ArrayOfInts[] = {1, 2, 3, 4, 5}; 

B를. cpp :

extern const int ArrayOfInts[]; 

void SomeFunc() 
{ 
    int a = ArrayOfInts[0]; 
} 

링커는 ArrayOfInts가 b.obj에서 해결되지 않는다고 불평합니다. const 한정자를 제거하면 링크가 성공합니다. 이것이 실패한 이유는 무엇입니까?

감사합니다.

+0

실제로 복제본입니다. – Badder

답변

0

컴파일러가 b.cpp을 컴파일 할 때 알고있는 모든 것에 대해 ArrayOfInts[0]의 값은 아무거나 될 수 있습니다. 따라서 컴파일 타임 상수가 아닙니다. C++에서 파일 범위의 상수는 기본적으로 컴파일 타임 상수입니다.

+0

'extern const'를 선언하여 파일 범위에서 외부 링키지로 상수를 만들 수 있습니다. – interjay

+0

답장 끝에 "기본적으로"를 추가하겠습니다. –

+1

"C++에서 파일 범위의 상수는 기본적으로 컴파일 타임 상수입니다." - 이것은 단순한 정수 타입에만 적용된다고 생각했습니다. 명확히 해 주셔서 감사합니다. – Badder