我有一點被投擲此警告的示例代碼:這是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。
僅僅因爲「它在這裏工作」並不意味着它是* defined *行爲。 * UB *可能是你一直觀察到的行爲......(它可能涉及到其他地方的倉鼠) – 2012-06-23 19:06:35
這正是我想知道的原因,並且來到了這裏。 :) –
考慮提取測試用例(警告可以用少得多的方式生成)並將其合併到標題中。它基本上歸結爲:'(c = x)+(c == y)' – 2012-06-23 19:08:17