この警告をスローしているサンプルコードが少しあります:
main.c: In function ‘getline_’:
main.c:30:32: warning: operation on ‘c’ may be undefined [-Wsequence-point]
この特定の演習では、||
and&&
演算子の使用を避ける必要がありましたが、未定義の動作が発生するようには見えません。コンパイラのメッセージは単なる警告ですが、念のために知りたかったのです。このコードは実際に未定義の動作を引き起こすのでしょうか?
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に感謝します。