나는이 코드 조각이에 초기화되지 않은 변수가 사용되는 것은 분명하다는, VC++
#include <iostream>
void foo(int *a)
{
std::cout<<*a<<std::endl;
}
int main()
{
int i;
foo(&i);
}
을 초기화되지 않은 변수를 결정합니다.
나는 과 마찬가지로 error C4700을 사용했지만 위의 코드에서 컴파일러가 오류로 표시하지 않았습니다.
또한 코드 분석을 실행 해 보았습니다. 문제가 없도록 코드 조각으로보고했습니다.
소스 코드에서 초기화되지 않은 변수를 확인하는 신뢰할 수있는 방법은 무엇입니까?
나는 여기에 멋진 일을한다. 그러나 나는 윈도우 API와 MFC에 대한 많은 호출을 가지고 있기 때문에 나를위한 옵션이 아니다.
그것은 당신이 "분명"입니다하지만 컴파일러 : 당신은 포인터 간접 통해 (인라인이 아닌) 함수에 변수를 전달 (함수 인라인을하고 인라인을 활성화하면 GCC와 경고를 트리거 않습니다). 이제 대답이 아니라 처음에 초기화되지 않은 변수를 정의하는 이유는 무엇입니까? 문제를 피하는 간단한 방법은 변수를 정의 할 때 항상 초기화하는 것입니다 (초기화 할 때까지 변수를 정의하지 않아야 함을 의미 함). –
@gx_ : 초기화되지 않은 변수를 정의하는 것이 아니라 가능한 문제에 대한 코드 기반을 갖는 코드베이스를 살균하는 것입니다. 또한 나는 "당신에게"분명하지만 컴파일러에게는 그렇지 않다 "라고 반대합니다. 내 요점을 증명하기 위해 나는 위의 코드베이스에 대해 Valgrind를 실행하고 응답을 결정해야합니다. – Abhijit
답장을 보내 주셔서 감사합니다 ("내 코드가 아닐 것"이라고 의심했지만 정확한 답변은 없었습니다). 그러나 나는 컴파일러에 대해 분명히 분명하지 않다. (foo 인라인을 만들고 _ 컴파일러에게 명백하게). 또한 valgrind는 컴파일러도 아니고 정적 분석 도구가 아니라 _dynamic_ 체커입니다. –