编码风格反对警告检查

时间:2014-10-17 02:09:55

标签: c while-loop c99 c89

在清除编译警告期间,我遇到了以下代码:

char *strcpy(char *dest, char *src)
{
    unsigned int i;

    while( dest[i] = src[i] )//assignment in condition
        i++;

    return dest;
}

代码的基本功能应该没问题,但是编译器警告assignment in condition,这部分代码是否有任何潜在的风险?如果需要清理这种警告吗?

2 个答案:

答案 0 :(得分:4)

需要清理各种警告。

引入此警告是因为===经常被程序员混淆(hello,Pascal!),并且可以通过在赋值表达式周围添加括号来明确说明您的意图:

if ((x = y)) // no warning

答案 1 :(得分:3)

不,你不需要解决这个问题。

警告的原因是有时人们在=表示==时错误地键入while (response = 'n') ,例如

while ((dest[i] = src[i]) != 0)

条件中的赋值更可能是这样的错误,而不是要测试其值的赋值,因此编译器会对此进行警告。您可以通过将分配包装在测试中来使警告静音:

while

另一方面,我建议您始终将if{}的正文放在i内,即使它只是一个陈述。见Why is it considered a bad practice to omit curly braces?

您还需要初始化unsigned int i = 0;

{{1}}