在清除编译警告期间,我遇到了以下代码:
char *strcpy(char *dest, char *src)
{
unsigned int i;
while( dest[i] = src[i] )//assignment in condition
i++;
return dest;
}
代码的基本功能应该没问题,但是编译器警告assignment in condition
,这部分代码是否有任何潜在的风险?如果需要清理这种警告吗?
答案 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}}