가 I이 경고 던지고 샘플 코드의 비트 가지고, I는 ||
및 &&
연산자를 사용하지 않도록했다 특정 연습C에서 정의되지 않은 동작입니까? (c = X) + (c == Y)
main.c: In function ‘getline_’:
main.c:30:32: warning: operation on ‘c’ may be undefined [-Wsequence-point]
을하지만 이것은 정의되지 않은 동작을 생성해야하는 것처럼 보이지 않습니다. 컴파일러 메시지 은 단지 경고이지만입니다.하지만 알고 있기를 바랍니다. 이 코드는 실제로 정의되지 않은 동작을 생성합니까?
24 int getline_(char s[], int limit)
25 {
26 int i, c;
27 i=0;
28 for(i=0; (i<limit-1) + ((c=getchar())!='\n') + (c!=EOF) == 3; i++){
29 s[i]=c;
30 }
31 if(c == '\n'){
32 s[i]=c;
33 i++;
34 }
35 s[i]='\0';
36 return i;
37 }
기본 테스트에서 정상적으로 작동하는 것 같습니다.
편집 : 댓글 당 제목이 업데이트되었습니다. 감사합니다. pst.
"여기에서 작동합니다"가 정의 된 동작을 의미하지는 않습니다. * UB *는 당신이 항상 보았던 행동일지도 모릅니다. (그렇지만 햄스터가 다른 곳으로 날아가는 것을 포함 할 수 있습니다) –
정확히 알고 싶었 기 때문에 여기에 왔습니다. :) –
테스트 케이스를 증류하는 것을 고려하십시오 (경고는 훨씬 덜 생성 될 수 있습니다). 그것은 기본적으로 다음과 같습니다 :'(c = x) + (c == y)' –