Valid Through The Ages
Revised answer for &quot;better&quot; scoring system
C89 / C99, Score: 0
My program is 52 characters long and uses the same mechanism as in my original answer to achieve the different output. This works because C89 doesnt treat // as a comment:
i=32;main(){putchar(i+++0//**/
+52)&amp;&amp;i&lt;84&amp;&amp;main();}

The results:
$ ./diff2c89
 !&quot;#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRS
$ ./diff2c99
TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂Çüéâäàåç
$ ./diff2c99 | wc
      0       1      52
$ ./diff2c89 | wc
      0       1      52
$ wc diff2.c
      1       2      52 diff2.c

Old answer:
C89 / C99, Score: -Infinity?
I'm not entirely sure if this program doesn't break the rules, but never mind.
This program exploits the fact that in C89 // is not a valid comment but /* ... */ is.
Using the comment trick an other function is executed. In C89 the function just prints &quot;trolololol...&quot; until the stack overflows (so it might finish within 2 seconds).
f1(){printf(&quot;ol&quot;);f1();}
f2(){printf(&quot;oll&quot;);}
main(){
    printf(&quot;tr&quot;);
    void (*f[])() = {f1,f2};
    f[0 //* trollololol */
      +1]();
}

C99
$ ./diffc99
troll

C89
$ ./diffc89
trolololololololololololololololololololololololololololololololololololololololololo
lolololololololololololololololololololololololololololololololololololololololololol
ololololololololololololololololololololololololol ....