Gnębi mnie ciekaowść i mam prośbę o wykonanie poniższego progamiku i wypisanie przy jakich opcjach kompilacji (o ile są) i przy jakim kompilatorze jakie otrzymaliście wyniki
#include <stdio.h>
void fun(int a,int b){
if(a>b)printf("od prawej/ostatniego parametru\n");
if(a==b)printf("wtf?!\n"); // nie powinno sie nigdy wykonac
if(a<b)printf("od lewej/pierwszego parametru\n");
}
int main(){
int i=1;
fun(i++,i++);
return 0;
}
gcc (GCC) 3.3.4 (pre 3.3.5 20040809)
-Os/-O2 i bez parametrów: od prawej/ostatniego parametru
-O3: od lewej/pierwszego parametru
gcc (GCC) 4.0.2 20050901 (prerelease) (SUSE Linux)
zabawa z -O* nic nie daje: od prawej/ostatniego parametru
Może ktoś wie również z czego to wynika ?
Prościutki teścik, kwestia kolejności operacji na parametrach funkcji, kolejności wrzucania parametrów na stos, czy jakolwiek to zwał.