精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>C、C++语言基础>>结果是残酷的:给喜欢钻printf()左右计算顺序以及++,--牛角尖的人

主题:结果是残酷的:给喜欢钻printf()左右计算顺序以及++,--牛角尖的人
发信人: 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

兄弟我抛出几块砖,有玉的赶紧亮出来啊!
  

[关闭][返回]