아래 코드와 비슷한 코드가 나타납니다. 동일한 이름의 동일한 함수에서 두 개의 스택 변수가 같은 시간에 동시에 유효하지만 문제가 발생할 수 있습니다. (읽기 : 나는 단지 이것을 디버깅하는 데 30 분을 낭비했다.) VS2010 (최고 레벨)의 경고 수준 4에서이 종류의 일이 발생했을 것으로 기대했을 것입니다. 나는 뭔가를 놓쳤는가, 아니면 한 번 이상 보푸라기가있는 전체 코드베이스에 충돌 할 때인가? lint와 같은 정적 분석 도구가 이와 같은 이름 충돌을 일으킬 수 있습니까?이 코드가 경고를 발생시켜야합니까?
char *x = strchr(Buffer,' ');
if (x)
{
*x = 0;
x++;
char *x = strchr(x,' ')
if (x)
*x = 0;
}
GCC이 AFAIR에 더 나은 않습니다 ... –
가 동일한 범위의 아니에요 :
경고를 제공합니다. 하나의'x'는 함수 범위이고, 하나는 블록 범위입니다. –
경고가 발생하기 쉽지 않다고 생각합니다. 많은 경우 그것은 누군가가 원하는 것입니다 (예 : 공식 매개 변수 이름 및 클래스 구성원 - 일반적으로 새 이름을 고안하고 싶지 않음). – Ghita