适用于Linux 32/64 Windows 32/64使用GCC,DOS和OS2编译,在Mac OS上使用MS编译器或使用GCC编译BSD,转到无限循环
char *b,p[]={'0','1','2','3','4','5','6','7','8','9','\0'};
for (b=p;(*(b++)=*b););
printf("p=%s\n",p);
// result:
// 123456789
// Test for MacOS or BSD
unsigned char Test=0x0F;
for (b=p;((*(b++)=*b) && --Test););
if (!Test) printf("Error\n");
// OK for Mac OS or FreeBSD
for (b=p;(*b);b++) *b=*(b+1);
printf("p=%s\n",p);
// result:
// 123456789
Run Code Online (Sandbox Code Playgroud)
好的,现在它可以工作了,但问题仍然存在,为什么如果语法正确它不起作用?
问题是这个表达式没有排序:
*(b++)=*b
Run Code Online (Sandbox Code Playgroud)
实质上,被修改的值不止一次被访问,而中间没有序列点.这意味着行为未定义.
您的另一个表达式没有未定义的行为,因为修改发生在循环头中:
*b=*(b+1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |