2014-04-16 2 views
0

기능 실행 순서 - CPP

void function(char* p1, char* p2) 
{ 
    // [...] 
    return; 
} 
char* print(char* msg) 
{ 
    printf("%s\n", msg); 
    return msg; 
} 
function(print("first"), print("second")); 

이 같은 출력을 제공하는 다음 코드 제 제

오른쪽의 실행 기능 왼쪽 이유가 흥미 롭다.

+2

표준을 이해하는 데 도움이 될 것입니다, 그것을 구현하는 공급 업체에 달려있다이 – EdChum

+2

참조 관련 : http://stackoverflow.com/questions/2934904/ c-function-evaluation-order-of-c-function- 매개 변수 – EdChum

답변

1

은 C++ 표준 함수 호출 (5.2.2/4) 말한다 :

함수가 호출

은 각 매개 변수의 대응하는 인수로 초기화되어야한다. [참고 : 이러한 초기화가 불확실하게 서로에 대해 순서가있다 -엔드 노트] 코드의 조각을위한

귀하의 컴파일러는, 왼쪽 순서로 오른쪽 매개 변수를 초기화하기로 결정했습니다. 다른 코드 또는 동일한 코드로 표현 된 컴파일러는 다른 선택을 할 수 있습니다. 순서는 단순히 표준에 의해 지정되지 않으며 당신은 그것에 의지 할 수 없습니다.

특정 순서를 적용하려면 이러한 함수 호출을 명시 적으로 순서대로 지정해야합니다.

-1

이 문제는 함수에서 사용하는 스택 메모리 때문입니다. 이 때문에 출력 Second First이다 이것

// Push Operation 
1. Call function() 
2. Call print("First") 
3. Call Print("Second") 

// Pop Operation 

4. Execute Print("Second") 
5. Execute Print("First") 
6. Execute function() 

다음과 같이

function(print("first"), print("second"));

이 함수의 실행이 될 것이다.

자세한 내용은 Link을 참조하십시오.

희망이 당신이 매개 변수 평가의 순서를 지정하지 않습니다