Jef*_*ing 4 c undefined-behavior
我有一些示例代码抛出此警告:
main.c: In function ‘getline_’:
main.c:30:32: warning: operation on ‘c’ may be undefined [-Wsequence-point]
Run Code Online (Sandbox Code Playgroud)
在这个特定的练习中,我要避免使用||和&&运算符,但这似乎不应该产生未定义的行为.编译器消息是只是一个警告,但我想知道knowings缘故.这段代码实际上会产生未定义的行为吗?
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 }
Run Code Online (Sandbox Code Playgroud)
它似乎在我的基本测试中正常工作.
编辑:根据评论更新标题,谢谢pst.
oua*_*uah 13
这是未指定的行为:
(i<limit-1) + ((c=getchar())!='\n') + (c!=EOF) == 3
在C中未指定序列点之间的表达式的评估顺序.如果c在相等性检查之前发生赋值,则未指定EOF.
除了未指定的行为之外,它还是未定义的行为,因为它违反了序列点规则,特别是这个:
(C99,6.5p2)"此外,先前的值应该是只读的,以确定要存储的值."
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |