누구나 다음의 출력을 설명 할 수 있습니까? 나는 모든 것을 논리적으로 만들려고했는데 나중에 'x'가 표현식의 값으로 지정되었지만 printf 문에서 그 대답이 어떻게 다른지 이해할 수없는 후기 부분을 설명 할 수 있습니다 !!!printf의 단항 연산자
다른 컴파일러는 다르게 동작 할 수 있습니다. 누군가가 어떤 컴파일러에 대해서이 동작을 설명 할 수 있다면 좋을 것입니다. 내가 GCC를 사용하고
오픈 수세 12.1 (아스파라거스) (i586 버전)에 (SUSE 리눅스) 4.6.2
코드 :
#include<stdio.h>
int main()
{
unsigned int x=0;
printf("expr= %d x=%d\n",(x^x),x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++||++x,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++||++x||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",++x||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",x++||++x||x++,x);
printf("x=%d\n",x);
x=0;
printf("expr= %d x=%d\n",(x^x)||x++||++x||x++,x);
printf("x=%d\n",x);
x=0;
(x^=x);
printf("x=%d\n",x);
x=0;
(x^=x)||x++;
printf("x=%d\n",x);
x=0;
(x^=x)||x++||++x;
printf("x=%d\n",x);
x=0;
(x^=x)||x++||++x||x++;
printf("x=%d\n",x);
return 0;
}
출력 :
expr= 0 x=0
x=0
expr= 0 x=1
x=1
expr= 1 x=2
x=2
expr= 1 x=2
x=2
expr= 0 x=1
x=1
expr= 1 x=1
x=1
expr= 1 x=2
x=2
expr= 1 x=2
x=2
x=0
x=1
x=2
x=2
감사
많은 코드가 있습니다. ** 당신이 이해하지 못하는 ** **을 지정하십시오 (당신이 이해하는 모든 것을 제거하는 것이 더 좋습니다). –
시퀀스 포인트간에 변수를 증가시키고 게시하기를 원하는 사람들의 전단 숫자에 계속해서 놀랐습니다 ... 왜? –
@EdS .:'||'는 시퀀스 포인트입니다. –