[C언어] printf 의 실행 순서가 어떻게 되나요?
글쓴이: purenix / 작성시간: 월, 2008/07/21 - 1:30오후
int ab=5;
int a()
{
return ++ab;
}
int main()
{
...
printf("%d %d",a(),a());
........
}
라고 했을때....
결과값이 6 7 이 아니라 7 6 이 되는데요.
printf의 인자 호출 순서는 <--- 이 되는게 맞는건가요?
이러한 이유를 확인하려면 어디의 문서를 보면되는지 가르침을 주시길 부탁드립니다.
그럼 수고하세요!
Forums:


정해져 있지
정해져 있지 않습니다. 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 法頂