2013-04-17 11 views
0

참고 : Xcode의 최신 버전과 함께 제공되는 목적 C 컴파일러를 사용하고 있습니다.const____restrict 포인터는 수정할 수 있지만 typdef'd 버전은 수정할 수없는 이유는 무엇입니까?

왜이 법적 것을 그 것이다 :

void verySpecial(const float* __restrict foo, const int size) { 
    for (int i = 0; i < size; ++i) { 

     // ... do special things ... 

     ++foo; // <-- Should be illegal to modify const pointer? 
    } 
} 

그러나, 나는 타입 정의를 사용하는 경우, 그것은 내가 무엇을해야 생각한다.

typedef float* __restrict RFloatPtr; 

void verySpecial(const RFloatPtr foo, const int size) { 
    for (int i = 0; i < size; ++i) { 

     // ... do special things ... 

     ++foo; // <-- Now this is a compiler error. 
    } 
} 

그래서 typedef'd 경우와 다른 점은 무엇입니까? __restrict에 대한 정보를 읽으면 두뇌가 상처를받습니다.

+1

첫 번째 Apple 's에는 gcc 또는 llvm의 objective-c 컴파일러가 없습니다. –

+1

@AnoopVaidya 허, 뭐라구? –

+0

뭐든간에. 그것은 XCode와 함께 제공되는 컴파일러입니다. 앱 스토어에서 가장 최신 버전의 XCode입니다. –

답변

0
++foo; // <-- Should be illegal to modify const pointer? 

넵. const 포인터를 수정하는 것은 불법입니다. 그러나 const이 아닌 포인터를 수정하면 const이 아닌 것입니다. 이 이해가되지 않습니다 때문에, 당신은 물론 당신이 restrict 포인터를 수정할 수 없습니다, 또한

float *const foo 

const float *foo 

을 혼동하고 생각합니다. restrict은 포인터가 다른 포인터와 겹치지 않도록 컴파일러에 알립니다. 이 가정은 포인터를 감소 시키거나 증가시킬 경우 더 이상 적용되지 않을 수 있습니다.