void function(char* p1, char* p2)
{
// [...]
return;
}
char* print(char* msg)
{
printf("%s\n", msg);
return msg;
}
function(print("first"), print("second"));
이 같은 출력을 제공하는 다음 코드 제 제
오른쪽의 실행 기능 왼쪽 이유가 흥미 롭다.
void function(char* p1, char* p2)
{
// [...]
return;
}
char* print(char* msg)
{
printf("%s\n", msg);
return msg;
}
function(print("first"), print("second"));
이 같은 출력을 제공하는 다음 코드 제 제
오른쪽의 실행 기능 왼쪽 이유가 흥미 롭다.
은 C++ 표준 함수 호출 (5.2.2/4) 말한다 :
함수가 호출은 각 매개 변수의 대응하는 인수로 초기화되어야한다. [참고 : 이러한 초기화가 불확실하게 서로에 대해 순서가있다 -엔드 노트] 코드의 조각을위한
귀하의 컴파일러는, 왼쪽 순서로 오른쪽 매개 변수를 초기화하기로 결정했습니다. 다른 코드 또는 동일한 코드로 표현 된 컴파일러는 다른 선택을 할 수 있습니다. 순서는 단순히 표준에 의해 지정되지 않으며 당신은 그것에 의지 할 수 없습니다.
특정 순서를 적용하려면 이러한 함수 호출을 명시 적으로 순서대로 지정해야합니다.
이 문제는 함수에서 사용하는 스택 메모리 때문입니다. 이 때문에 출력 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을 참조하십시오.
희망이 당신이 매개 변수 평가의 순서를 지정하지 않습니다
표준을 이해하는 데 도움이 될 것입니다, 그것을 구현하는 공급 업체에 달려있다이 – EdChum
참조 관련 : http://stackoverflow.com/questions/2934904/ c-function-evaluation-order-of-c-function- 매개 변수 – EdChum