내가 원하는 것은 파일 범위 변수 (내 프로그램에서)를 파일 외부에서 수정할 수 없도록 보장하는 것입니다. 그래서 저는 외부 연결을 배제하기 위해 그것들을 '정적'이라고 선언합니다. 그러나이 변수가 포인터를 통해 수정할 수 없도록하고 싶습니다. C에서 주소를 계산할 수없는 파일 범위 개체를 만들 수 있습니까?
나는를 사용하여 (명시 적으로 중, 계산 될 수 없다 저장소 클래스 지정 레지스터로 선언 된 객체의 어떤 부분의주소의 '등록'저장 클래스와 비슷한 뭔가를 원하는 단항 & 연산자) 또는 암시 적으로 (배열 이름을 포인터로 변환하여).
'register'키워드의 제한없이 (파일 범위 변수에는 사용할 수 없으며 레지스터로 선언 된 배열은 인덱싱 할 수 없습니다). 이다
,
<new-keyword> int array[SIZE] = {0};
int a = array[0]; /* should be valid */
int *p = array; /* should be INVALID */
p = &array[3]; /* should be INVALID */
이 목표를 달성 대해 갈 수있는 가장 좋은 방법은 무엇입니까
?왜 그런 기능이 필요합니까?
사용 시나리오는 모든 수정 사항을 개인적으로 검토 할 수없는 경우에도 나중에 많은 사람들이이 파일을 수정한다는 것입니다. 나는 가능한 한 많은 잠재적 인 버그를 배제하고 싶다. 이 경우 모듈에 대한 '비공개'변수가 문서 및/또는 규율에만 의존하지 않고 그대로 유지되도록하려는 것입니다.
그냥 'const'를 사용하십시오. –
당신이 저장하는 어떤 것도 주소를 가지고 있다고 생각하지 않습니다. 그러나 주소를 "숨길"수 있습니다. 일종의 가상 주소를 만들거나 마스크를 적용하여 "실제"주소를 가져올 수 있습니다. – Coconop
IMO : 배열에 대한 포인터를 만들 수 있으면 배열의 주소를 계산할 수 있습니다. 이는 array [0]이 (배열의 주소) + (0 * sizeof (int))에 정수의 내용을 실제로 요청하고 있기 때문입니다. – user3629249