2012-04-24 3 views
1

매개 변수 전달 메커니즘이 Ada에서와 같이 copy-in-copy-out 인 경우 다음과 같은 C 프로그램의 결과는 무엇입니까? ? swap(v, list[v]) 실행 중에 v은 3으로 업데이트됩니다. 복사 할 때 두 번째 매개 변수의 결과는 list[3] 또는 list[1]으로 복사됩니까?copy-in-copy-out 매개 변수 (값 결과 매개 변수 전달)

swap(int x, int y){ 
    int t = x; 
    x = y; 
    y = t; 
} 

main(){ 
    v = 1; 
    int list[5] = {1,3,5,7,9}; 
    swap(v, list[v]); 
    print v, list[0...4]; 
} 
+0

이 숙제가 있습니까? – deceze

+0

예, 정확히 ... – ZHOU

+2

숙제이기 때문에 알아낼 수있는 Ada 프로그램을 작성하지 않은 이유가 있습니까? – NWS

답변

3

에이다의 매개 변수를 전달 mechanisim이 하지 복사에 복사 밖으로. Ada는 C와 같지 않습니다. 여기서 mechanisim은 명시 적이며 컴파일러는 그렇게하기가 어리석은 경우에도이를 따릅니다.

언어가 일을 참조로 전달하도록 지정하는 특정 상황이 있습니다. 그렇지 않으면 실제로 컴파일러에 달려 있으며 다른 것보다는 하나의 메커니즘을 사용하는 것이 허용되지 않습니다. 실제적으로 컴파일러는 객체가 컴퓨터 레지스터에 들어 맞는 경우 보통 종국적으로 종결되는 의미있는 것을으로 처리하고 그렇지 않으면 참조합니다.

나열된 C 코드의 Ada 버전에서는 Ada로 변환하는 방법에 따라 다릅니다. 나는 당신이 그렇게 할 때 C가 잠재적으로 놀랄만 한 행동을 일으킨다 고 생각할 것입니다. Ada 컴파일러는 당신이 그렇게하지 못하게하거나 더 이상 보이지 않는 방식으로 문서화하도록 강제 할 것입니다 이상한.

0

매개 변수는 호출이 실행되기 전에 바인딩되므로 x는 v에 바인딩되고 y는 [1]에 바인딩됩니다.