OK for Linux 32/64 Windows 32/64 compiled with GCC, DOS and OS2 with MS compiler on Mac OS o BSD compiled with GCC, go to infinity loop
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
ok, now it works, but the question remains, why it does not work if the syntax is correct?