함수 인자의 수행 순서는 명시되지 않았다(unspecified)고 나오는군요.
다만 함수 수행 이전까지는 완료가 된다고 나와 있습니다.
The order of evaluation of the function designator, the actual arguments, and
subexpressions within the actual arguments is unspecified, but there is a sequence point
before the actual call.
일반적인 x86 기반이라면 C언어의 calling convention에 의해 stack에 역으로 push 되므로 일반적으로
역순으로 평가할 수 있다고 말할 수 있을 겁니다. (x86이라고 하더라도 다른 calling convention을
사용할 수 있는 환경도 있으므로 항상 그렇다고는 말할 수는 없습니다)
정해져 있지
정해져 있지 않습니다. printf 호출 전의 어느 시점에 a()가 두 번 실행되기는 하지만.
--
임수서룬뫼 윤희수 {cppig1995/돼지군}
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
표준에 따르면, C
표준에 따르면, C 에서는 오른쪽부터인 반면, C++ 에서는 정의 되어 있지 않습니다.(undefined)
표준에 그런 내용이 있나요?
음 이상하네요 제가 알기로는 정의되지 않은 걸로 알고 있는데...
C99에서 명시되지 않은 것으로 나옵니다.
함수 인자의 수행 순서는 명시되지 않았다(unspecified)고 나오는군요.
다만 함수 수행 이전까지는 완료가 된다고 나와 있습니다.
일반적인 x86 기반이라면 C언어의 calling convention에 의해 stack에 역으로 push 되므로 일반적으로
역순으로 평가할 수 있다고 말할 수 있을 겁니다. (x86이라고 하더라도 다른 calling convention을
사용할 수 있는 환경도 있으므로 항상 그렇다고는 말할 수는 없습니다)
아...
정확히는 C의 표준이 아니라 x86 의 convention 이군요.
지적 감사합니다.
C에서 인자의
C에서 인자의 순서와는 달리 disassemble 해보면 어셈블리에서 인자가 push되는 순서는 역순이기 때문에 연산 또한 역순으로 수행됩니다.
=============
박찬암 (hkpco)
http://hkpco.kr/
=============
박찬암 (hkpco)
http://hkpco.kr/
http://kldp.org/node/29819
http://kldp.org/node/29819
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
댓글 달기