为什么gcc没有为此

时间:2015-11-05 14:52:29

标签: c gcc gcc-warning

我在编写语句时错误地忘记了包含函数的名称。只有在调试中我才发现这一切,因为所有编译都很好。我很惊讶gcc没有对这样的C程序发出警告。

int x =0, a=1, b=2, c=3, d=4, e=5, f=6, g=7;

    printf("\n%d %d %d %d %d %d %d %d\n",x,a,b,c,d,e,f,g);

x = (a,g=b+c,d,e,f);

    printf("\n%d %d %d %d %d %d %d %d\n",x,a,b,c,d,e,f,g);

x = a,g=b+c,d,e,f;

    printf("\n%d %d %d %d %d %d %d %d\n",x,a,b,c,d,e,f,g);

代码应该读取functionName(a,g = b + c,d,e,f),但缺少函数名称。

语法x =(a,g = b + c,d,e,f)导致x = f 语法x = a,g = b + c,d,e,f导致x = a

在两种情况下,g均正确计算为b + c。

第一个版本x =(...)的警告是否按顺序排列?以这种方式出现(...)有效的独立表达方式。副产物是包含或排除parens也导致x的两个不同值。由于parens而设置x = f看起来像是生成机器代码的方式而不是语法驱动。

似乎应该标记一个警告,可能这个分组表达式实际上是缺少函数调用的参数。更好地捕获这样的警告,而不是在调试期间发现问题。

0 个答案:

没有答案