Gcc: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 3: | Line 3: | ||
== Function parameter evaluation order == | == Function parameter evaluation order == | ||
gcc 뿐만이 아니라, 모든 c 에 해당되는 내용이다. | gcc 뿐만이 아니라, 모든 c 에 해당되는 내용이다. | ||
간단히 말해서, function parameter 로 전달되는 parameter 들의 evaluation 에는 순서가 없다. 즉, 어떤 순위로 식이 평가되는지 알 수 없다는 것이다<ref>http://stackoverflow.com/a/621548/713079</ref>. | |||
<pre> | <pre> | ||
It depends on the argument type, the called function's calling convention, the archtecture and the compiler | It depends on the argument type, the called function's calling convention, the archtecture and the compiler | ||
</pre> | </pre> | ||
재밌는 테스트 결과가 있었다. | 재밌는 테스트 결과가 있었다. 다음의 예제를 보면 이해가 쉬울 것이다. | ||
<pre> | <pre> | ||
int i=1; | int i=1; | ||
Line 22: | Line 24: | ||
1 2 3 - using SunStudio C++ 5.9 on SunOS.sun4u | 1 2 3 - using SunStudio C++ 5.9 on SunOS.sun4u | ||
</pre> | </pre> | ||
== Options == | == Options == |
Latest revision as of 09:06, 13 July 2016
Overview
GNU c/c++ 컴파일러 gcc 내용 정리
Function parameter evaluation order
gcc 뿐만이 아니라, 모든 c 에 해당되는 내용이다.
간단히 말해서, function parameter 로 전달되는 parameter 들의 evaluation 에는 순서가 없다. 즉, 어떤 순위로 식이 평가되는지 알 수 없다는 것이다<ref>http://stackoverflow.com/a/621548/713079</ref>.
It depends on the argument type, the called function's calling convention, the archtecture and the compiler
재밌는 테스트 결과가 있었다. 다음의 예제를 보면 이해가 쉬울 것이다.
int i=1; printf("%d %d %d\n", i++, i++, i); results in 2 1 3 - using g++ 4.2.1 on Linux.i686 1 2 3 - using SunStudio C++ 5.9 on Linux.i686 2 1 3 - using g++ 4.2.1 on SunOS.x86pc 1 2 3 - using SunStudio C++ 5.9 on SunOS.x86pc 1 2 3 - using g++ 4.2.1 on SunOS.sun4u 1 2 3 - using SunStudio C++ 5.9 on SunOS.sun4u
Options
See also
- http://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviours-that-a-c-programmer-should-know-a - Stack overflow
Reference
<references />