发信人: goodfrd(Supervisor)
整理人: wenbobo(2002-12-24 09:22:33), 站内信件
|
【 在 w5762(爱新绝罗) 的大作中提到:】
:请问c语言中,printf()函数里的计算顺序
:是有左向右还是相反
:如prinft("%d,%d,%d",*P ,*(P++)+=5,*(P++))
:怎么算??
把我在4个平台(DOS,SCO,HP-UX,OS/400)上的测试结果贴出来给大家看:
1)PWIN98的DOS,BC++ 3.1:
C:\TEMP>VER
Windows 98 [Version 4.10.2222]
C:\TEMP>TYPE T3.C
#include <stdio.h>
main()
{
char s[10], *p = s;
int n;
for(n = 0; n < 10; n++) s[n] = n + 1;
printf("%d,%d,%d\n", *p, *(p++)+=5, *(p++));
return 0;
}
C:\TEMP>T3
3,8,1
2)SCO OpenServer 5.0.4:
$ uname -a
SCO_SV sco51 3.2 2 i386
$ cat t3.c
#include <stdio.h>
main()
{
char s[10], *p = s;
int n;
for(n = 0; n < 10; n++) s[n] = n + 1;
printf("%d,%d,%d\n", *p, *(p++)+=5, *(p++));
return 0;
}
$ cc -o t3 t3.c
$ ./t3
3,7,1
3)HP 9000 HP-UX 11.0
$ uname -a
HP-UX hp2 B.11.00 U 9000/800 1113480561 unlimited-user license
$ cat t3.c
#include <stdio.h>
main()
{
char s[10], *p = s;
int n;
for(n = 0; n < 10; n++) s[n] = n + 1;
printf("%d,%d,%d\n", *p, *(p++)+=5, *(p++));
return 0;
}
$ cc -o t3 t3.c
$ ./t3
1,6,2
4)AS/400, OS/400 V4R4M0 (CA/400不能用[]\,用 trigraphs 代替)
SRCPF member:
#include <stdio.h>
main()
{
char s??(10??), *p = s;
int n;
for(n = 0; n < 10; n++) s??(n??) = n + 1;
printf("%d,%d,%d??/n", *p, *(p++)+=5, *(p++));
return 0;
}
Run *pgm:
1,6,2
Press ENTER to end terminal session.
===>
F3=Exit F4=End of File F6=Print F9=Retrieve F17=Top
F18=Bottom F19=Left F20=Right F21=User Window
怎么样?结果是残酷的吧?有点想不通吧?为了以后你的工作不要被领导臭骂、被用户臭骂,奉劝各位老实一点,不要玩这些花样、钻这些没有意思的牛角尖。
---- 欢迎光临良友程序库:http://0d0a.126.com http://f12.my163.com,免费提供我的各种Source Code
兄弟我抛出几块砖,有玉的赶紧亮出来啊! |
|