pos = ++pos % N;
이라는 문장이 적법한가요? 왠지 헷갈리네요.
C언어 특성상 난해한 문법이 가능하지요.
장점이자 단점이죠.
IamAboy. YouareAgirl. Ah.hhh...
Hello World.
잘못된 코드입니다.
두 시퀸스 포인트 사이에 같은 객체(pos)가 두번 이상 수정되기 때문에 정해지지 않은 동작(undefined behavior)을 보입니다.
오랜만에 하다보니 헷갈리더라고요. 확실시해주어서 감사합니다.
문제 없는 코드 같은데요. 컴파일해봐도 경고조차도 나오지 않습니다.
경고 나옵니다.
# gcc -Wall t.c t.c: In function `main': t.c:11: warning: operation on `pos' may be undefined
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
문법상으로는(lexically) 적법합니다만 의미상으로는(semantically)는 불법입니다.
저도 좀 궁금합니다.
pos = pos++ % N
위의 것은 문제가 된다는 것을 알겠는데
pos = ++pos % N
예를 들어
pos = 10; pos = ++pos % 10 (3)(1) (2)
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
네. 수식의 평가 순서와 side effect가 발생하는 순서는 서로 무관합니다.
그렇군요. 다시 생각해보니 아래 같이 연산자 순서와 관계없이 문제가 되었던 것이 떠올랐습니다.
i = i + ++i;
정확히 기억은 안나는데 gcc 버전을 타서 다른 결과가 나는 것을 본 적이 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
예측된 결과를 추측하기 힘들죠.
C언어 특성상 난해한 문법이 가능하지요.
장점이자 단점이죠.
IamAboy. YouareAgirl. Ah.hhh...
Hello World.
잘못된
잘못된 코드입니다.
두 시퀸스 포인트 사이에 같은 객체(pos)가 두번 이상 수정되기 때문에 정해지지 않은 동작(undefined behavior)을 보입니다.
감사합니다.
오랜만에 하다보니 헷갈리더라고요.
확실시해주어서 감사합니다.
문제 없는 코드
문제 없는 코드 같은데요.
컴파일해봐도 경고조차도 나오지 않습니다.
경고 나옵니다. # gcc
경고 나옵니다.
# gcc -Wall t.c
t.c: In function `main':
t.c:11: warning: operation on `pos' may be undefined
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
문법상으로는(lexically)
문법상으로는(lexically) 적법합니다만
의미상으로는(semantically)는 불법입니다.
저도 좀
저도 좀 궁금합니다.
pos = pos++ % N
위의 것은 문제가 된다는 것을 알겠는데
pos = ++pos % N
예를 들어
의 결과는 1 이라고 판단해서는 안된다는 말인지요?
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
네. 수식의 평가
네.
수식의 평가 순서와 side effect가 발생하는 순서는 서로 무관합니다.
그렇군요. 다시
그렇군요. 다시 생각해보니 아래 같이 연산자 순서와 관계없이
문제가 되었던 것이 떠올랐습니다.
i = i + ++i;
정확히 기억은 안나는데 gcc 버전을 타서 다른 결과가 나는 것을 본 적이 있습니다.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
댓글 달기