This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: different output from the gcc


>> the following program prints different outputs on the terminal.
>>
>> #include <stdio.h>
>> int main()
>> {
>>     int i=10, j=20;
>>     printf("%d %d");
>>     return 0;
>> }
>>
>>
>> on windows nt, prints : 38076236 1627415320
>> on RH linux    , prints : 20 10
>> on sun solaris , prints : 67584 -1341572
>
>Are you sure you don't mean  printf("%d %d", i, j) ?
>
>If you don't provide the arguments corresponding to
>the printf control string, printf just scoops up
>whatever happens to be on the stack, which is 
>(expectedly) system dependant.  Or am I missing
>something?

  Roughly. Under some calling conventions, the first <n> arguments are
passed in registers. I would guess that Linux does that, and so printf
is getting the old values in those registers, which had been used as
temporaries for i and j; the other systems are passing stack crud.

        DaveK
-- 
 "The secret of life is honesty and fair dealing. If you can fake that,
you've got it made." -Groucho Marx

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]