나는 모든 것을 읽고 사방 대해 C에 "시간 상수를 컴파일 할"수 있고, 나는 아직에 설명을 드릴 수 없습니다 다음C 배열 요소는 실제로 const가 아닙니다.
const short testArray[2]={1,2};
//void IndeedConst(void){ testArray[0]=3; } //correctly reports "error: assignment of read-only location 'testArray[0]'"
const short testItem=testArray[0]; //why "error: initializer element is not constant"??
그래서 컴파일러는 testArray [0] 읽기 전용되는 것을 불평/const 그리고 동시에 testArray [0]이 일정하지 않다는 것을 나타냅니다! 나 자신이 컴파일시에 "분명 역 참조 연산자 [] 작동하지 않을 수 있습니다"대답 않았다 "일정 초기화,이 선은 오류없이 컴파일 것 whyever?
const short* testItem=&(testArray[1]);
을 여기 나는의 주소를 얻고 있습니다 배열의 두번째 항목. 그러므로 일정한 초기화 수있는 문제없이 역 참조!
이에 대한 설명 무엇 ? 정적 저장 기간과 변수의
'const short testItem = testArray [0];'은 오류를 생성해서는 안됩니다. MCVE를 게시하십시오. – juanchopanza
@mafso c89, c99 또는 c11 모드의 clang 3.5는 지원되지 않습니다. 유사하게 [gcc와] (http://ideone.com/gWHhkw). 어떤 컴파일러와 C 표준을 컴파일하고 있습니까? – juanchopanza
@mafso 명확히하기 : 나는 이것이 C라는 것을 알고있다. 나는 C++에 관해서 아무 말도하지 않았다. – juanchopanza